Як додати вибір відділу для користувачів у 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. Вивід поточного відділу користувача на фронтенді.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *