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

Сначала нужно добавить новую колонку в список пользователей. Для этого используем фильтр manage_users_columns:
add_filter('manage_users_columns', function($columns) {
$columns['department'] = 'Отдел';
return $columns;
});
Теперь в списке пользователей появится новая колонка «Отдел».
Чтобы администратор мог менять отдел пользователя прямо из списка, используем 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> с выбором отдела.
Чтобы изменения сохранялись без перезагрузки страницы, подключим скрипт:
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('Сохранено');
});
Теперь при изменении отдела он сразу сохраняется в мета-поле пользователя.
Чтобы показывать выбранный отдел на фронтенде авторизованному пользователю:
<?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>';
}
?>
С помощью этого кода вы получаете:
Колонку «Отдел» в списке пользователей в админке.
Возможность изменять отдел через выпадающий список.
Сохранение данных через AJAX без перезагрузки.
Вывод текущего отдела пользователя на фронтенде.
Хуки активации и инициализации в WordPress: Где и когда создавать таблицы
60
Select в HTML: скрытый placeholder, подсветка и динамический индикатор срочности
78
Как создать собственное меню в админке WordPress: простое руководство для новичков
84
Кастомизация страницы входа в WordPress: логотип, цвета, фоновая картинка и собственный CSS
122
Как изменить или полностью убрать текст в подвале (футере) админ-панели WordPress
98
Добавление мета-описания и ключевых слов в WordPress 519
Как обнаружить блокировщик рекламы на сайте с помощью JavaScript 204
Минимальная сумма заказа WooCommerce 181
Как добавить виджет для валют на панель администратора WordPress 154
Как добавить поле «Отдел» и ограничить видимость категорий в WordPress 150
Добавить комментарий