Вопрос или проблема
Я хочу создать таксономию, связанную с пользователями, поэтому мне хотелось бы показать таксономию в меню “Пользователи” в админке WordPress. В справочнике упоминается, что можно прикрепить таксономию к “nav_menu_item”, но я не могу найти рабочий пример, как это работает. Если я использую:
register_taxonomy( 'expertise', array( 'nav_menu_item' ), $args );
или
register_taxonomy( 'expertise', array( 'users' ), $args );
то это не работает.
Любая помощь будет очень ценна.
Функция register_taxonomy
предназначена только для добавления таксономий к существующим типам записей и пользовательским типам записей. Это не то, что можно расширить для пользователей.
Я только что попробовал несколько плагинов, работающих с таксономиями, и ни один из них не может прикрепить таксономию к пользователю.
из http://codex.wordpress.org/Function_Reference/register_taxonomy :
Использование
<?php register_taxonomy( $taxonomy, $object_type, $args ); ?>
$object_type
(массив/строка) (обязательно) Название типа объекта для объекта таксономии. Типы объектов могут быть встроенным типом записи или любым пользовательским типом записи, который может быть зарегистрирован.Встроенные типы записей:
post
page
- attachment
- revision
- nav_menu_item.
Пользовательские типы записей:
{custom_post_type} – Имена пользовательских типов записей должны быть все строчными и без пробелов.
null – Явная установка в null регистрирует таксономию, но не связывает ее с какими-либо объектами, так что она не будет доступна напрямую в пользовательском интерфейсе администрирования. Вам необходимо будет вручную зарегистрировать ее, используя параметр ‘taxonomy’ (переданный через $args) при регистрации пользовательского типа записи (см. register_post_type()), или используя register_taxonomy_for_object_type().
Посмотрите сюда, если хотите писать код:
http://justintadlock.com/archives/2011/10/20/custom-user-taxonomies-in-wordpress
Также есть плагины, вдохновленные этой статьей. Кроме того, есть крупный открытый плагин, который уходит еще дальше – Groups:
Ответ или решение
Для того чтобы добавить таксономию в меню пользователей в административной панели WordPress, необходимо учесть несколько ключевых моментов. К сожалению, стандартная функция register_taxonomy
не поддерживает прямую привязку таксономий к объекту типа "пользователь". Однако с помощью кастомного кода можно реализовать желаемую функциональность. Ниже приведены четкие шаги, которые помогут вам в этом.
Шаг 1: Регистрация таксономии
Чтобы создать таксономию, связанную с пользователями, нужно использовать хук init
и функцию register_taxonomy
, но с настройками, которые позволяют привязывать таксономию к пользователям.
function create_user_expertise_taxonomy() {
$labels = array(
'name' => _x('Expertise', 'taxonomy general name', 'textdomain'),
'singular_name' => _x('Expertise', 'taxonomy singular name', 'textdomain'),
'search_items' => __('Search Expertise', 'textdomain'),
'all_items' => __('All Expertise', 'textdomain'),
'parent_item' => __('Parent Expertise', 'textdomain'),
'parent_item_colon' => __('Parent Expertise:', 'textdomain'),
'edit_item' => __('Edit Expertise', 'textdomain'),
'update_item' => __('Update Expertise', 'textdomain'),
'add_new_item' => __('Add New Expertise', 'textdomain'),
'new_item_name' => __('New Expertise Name', 'textdomain'),
'menu_name' => __('Expertise', 'textdomain'),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => false,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'expertise'),
);
register_taxonomy('expertise', 'user', $args);
}
add_action('init', 'create_user_expertise_taxonomy');
Шаг 2: Добавление метабокса на страницу редактирования пользователя
Теперь, когда таксономия зарегистрирована, необходимо добавить метабокс на страницу редактирования пользователя, чтобы администраторы могли назначать соответствующую таксономию для пользователей.
function user_expertise_meta_box() {
add_meta_box('user_expertise_meta', __('User Expertise', 'textdomain'), 'user_expertise_meta_box_callback', 'user', 'side', 'default');
}
add_action('add_meta_boxes', 'user_expertise_meta_box');
function user_expertise_meta_box_callback($user) {
$expertise_terms = get_terms(array(
'taxonomy' => 'expertise',
'hide_empty' => false,
));
$current_expertise = wp_get_object_terms($user->ID, 'expertise', array('fields' => 'ids'));
foreach ($expertise_terms as $term) {
?>
<label>
<input type="checkbox" name="user_expertise[]" value="<?php echo esc_attr($term->term_id); ?>" <?php checked(in_array($term->term_id, $current_expertise)); ?>>
<?php echo esc_html($term->name); ?>
</label><br />
<?php
}
}
function save_user_expertise($user_id) {
if (isset($_POST['user_expertise'])) {
wp_set_object_terms($user_id, intval($_POST['user_expertise']), 'expertise', false);
} else {
wp_set_object_terms($user_id, null, 'expertise', false);
}
}
add_action('edit_user_profile_update', 'save_user_expertise');
add_action('personal_options_update', 'save_user_expertise');
Шаг 3: Обновление интерфейса
Теперь вы сможете видеть таксономию "Expertise" в боковом меню редактирования пользователей. Убедитесь, что вы обновляете интерфейс и проверяете его на различных экранах пользователей.
Заключение
Создание и привязка таксономии к пользователям — это полезный метод для расширения функциональности вашего WordPress сайта, особенно если ваша цель заключается в организации пользователей по определённым категориям. Вы также можете использовать готовые плагины, такие как Groups, которые предоставляют более продвинутые функции для работы с пользователями и их категориями.
Этот подход не только делает управление пользователями более управляемым, но и позволяет вам интегрировать дополнительные плагины и функции в систему, улучшая пользовательский опыт.