Как добавить выбор отдела для пользователей в WordPress и выводить его на сайте


В этой статье мы разберем, как в WordPress добавить кастомную колонку «Отдел» в список пользователей в админке, позволить администратору менять значение отдела через выпадающий список и выводить выбранный отдел на фронтенде для авторизованного пользователя.

1. Добавление колонки «Отдел» в админке

Сначала нужно добавить новую колонку в список пользователей. Для этого используем фильтр manage_users_columns:

add_filter('manage_users_columns', function($columns) {
    $columns['department'] = 'Отдел';
    return $columns;
});

Теперь в списке пользователей появится новая колонка «Отдел».

2. Вывод выпадающего списка с отделами





Чтобы администратор мог менять отдел пользователя прямо из списка, используем manage_users_custom_column:

add_action('manage_users_custom_column', function($value, $column_name, $user_id) {
    if ($column_name === 'department') {
        $current = get_user_meta($user_id, 'department', true);

        $options = [
            '' => '— Не выбран —',
            'горний цех' => 'Горний цех',
            'гараж' => 'Гараж'
        ];

        $html = '<select class="user-department" data-user-id="' . esc_attr($user_id) . '">';
        foreach ($options as $val => $label) {
            $selected = selected($current, $val, false);
            $html .= "<option value='$val' $selected>$label</option>";
        }
        $html .= '</select>';

        return $html;
    }
    return $value;
}, 10, 3);

Теперь для каждого пользователя в колонке «Отдел» отображается <select> с выбором отдела.

3. Сохранение выбранного отдела через AJAX

Чтобы изменения сохранялись без перезагрузки страницы, подключим скрипт:

add_action('admin_footer-users.php', function() { ?>
<script>
jQuery(document).ready(function($){
    $('.user-department').change(function(){
        var user_id = $(this).data('user-id');
        var department = $(this).val();

        $.post(ajaxurl, {
            action: 'save_user_department',
            user_id: user_id,
            department: department,
            _wpnonce: '<?php echo wp_create_nonce("save_user_department"); ?>'
        }, function(response){
            console.log(response);
        });
    });
});
</script>
<?php });

И добавим обработчик на стороне WordPress:

add_action('wp_ajax_save_user_department', function() {
    check_ajax_referer('save_user_department');

    if (!current_user_can('edit_users')) wp_die('Нет доступа');

    $user_id = intval($_POST['user_id']);
    $department = sanitize_text_field($_POST['department']);

    update_user_meta($user_id, 'department', $department);

    wp_send_json_success('Сохранено');
});

Теперь при изменении отдела он сразу сохраняется в мета-поле пользователя.

4. Вывод отдела текущего пользователя на сайте

Чтобы показывать выбранный отдел на фронтенде авторизованному пользователю:

<?php
$current_user_id = get_current_user_id();

if ($current_user_id) {
    $department = get_user_meta($current_user_id, 'department', true);

    if ($department) {
        echo '<div class="user-department">Ваш відділ: <strong>' . esc_html(ucfirst($department)) . '</strong></div>';
    } else {
        echo '<div class="user-department">Ваш відділ не назначен</div>';
    }
} else {
    echo '<div class="user-department">Вы не авторизованы</div>';
}
?>

Итог

С помощью этого кода вы получаете:

  1. Колонку «Отдел» в списке пользователей в админке.

  2. Возможность изменять отдел через выпадающий список.

  3. Сохранение данных через AJAX без перезагрузки.

  4. Вывод текущего отдела пользователя на фронтенде.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *