Вопрос или проблема
Как администратору сайта, мне хотелось бы иметь контроль над вещами.
Я хотел бы предотвратить возможность моим участникам и авторам (которые создают контент для меня) добавлять новые теги. Я не хочу, чтобы эта таксономия тегов превратилась в зоопарк! Особенно учитывая, что WordPress создает отдельные термины для apple и Apple! Я даю им длинный список (из 1000 тегов, которые хочу, чтобы они использовали), и на этом все. Они не могут придумать 1001-й.
Как мне этого добиться, чтобы мои авторы просто выбирали из того, что я им даю?
Эта тема на WordPress Answers содержит именно ту информацию, которую вы ищете – Плагин для ограничения неадминистраторов в использовании существующих тегов
Просто измените “administrator” на то, что вам нужно.
Это самый надежный ответ на этот вопрос, если кто-то когда-либо вернется к этому посту.
Добавьте это в ваш файл functions.php
.
add_action( 'pre_insert_term', function ( $term, $taxonomy )
{
return ( 'yourtax' === $taxonomy )
? new WP_Error( 'term_addition_blocked', __( 'Вы не имеете права добавлять новые термины.' ) )
: $term;
}, 0, 2 );
Надеюсь, это поможет кому-то в будущем.
Проверьте этот ответ для вашего решения. Я использовал функцию remove_meta_box() во внутреннем WordPress, чтобы решить аналогичную проблему.
Ответ Пола великолепен, так как он также предотвращает создание терминов через REST API (как в случае блокового редактора). Для более продвинутой версии вы можете сделать следующее:
add_action( 'pre_insert_term', function ( $term, $taxonomy )
{
// получение текущих настроек таксономии
$tax = get_taxonomies( array(), 'object' )[ $taxonomy ] ?? false;
// получение определенной разрешения на управление терминами
$cap = $tax->cap->manage_terms ?? false;
return ( $cap && ! current_user_can( $cap ) )
? new WP_Error( 'term_addition_blocked', __( 'Вы не авторизованы для добавления новых терминов.' ) )
: $term;
}, 0, 2 );
Это заблокирует добавление терминов для всех таксономий, если у вас нет назначенной способности при регистрации терминов, которая по умолчанию равна 'manage_categories'
. По умолчанию только редакторы и выше имеют эту способность, но вы можете настроить роли или даже назначить другую способность для вашей пользовательской таксономии при регистрации или изменить возможности встроенных таксономий.
assign_terms
по умолчанию равно 'edit_posts'
, поэтому по умолчанию участники и выше все еще смогут добавлять термины к постам, но это предотвратит их создание новых.
.
Ответ или решение
Вопрос о том, возможно ли запретить определённым ролям пользователей создание новых тегов в WordPress, становится важным для администраторов сайтов, которые стремятся поддерживать порядок в системе таксономии и избегать путаницы. В вашей ситуации, когда существует список из 1000 тегов, и вы хотите ограничить пользователей, таких как контрибьюторы и авторы, только выбором из этих заранее определённых тегов, решение возможно.
1. Понимание ролей и возможностей
По умолчанию в WordPress пользователи с ролью контрибьютора могут добавлять свои собственные теги, что может привести к нежелательным дублированиям и путанице, как вы и упомянули (например, "apple" и "Apple"). Для того чтобы предотвратить это, необходимо изменить стандартные возможности, предоставляемые пользователям.
2. Простой подход с использованием хуков
Один из самых простых способов запретить создание новых тегов — это использование хука pre_insert_term
. Добавив следующий код в файл functions.php
вашей темы, вы сможете блокировать добавление новых тегов для определённых ролей:
add_action( 'pre_insert_term', function ( $term, $taxonomy ) {
return ( 'post_tag' === $taxonomy )
? new WP_Error( 'term_addition_blocked', __( 'Вы не имеете права добавлять новые термины.' ) )
: $term;
}, 0, 2 );
Этот фрагмент кода проверяет, пытается ли пользователь добавить новый термин в таксономию тегов (post_tag
). Если да, то он выдаёт ошибку, тем самым блокируя эту возможность.
3. Проверка прав пользователя
Чтобы убедиться, что только пользователи с определёнными правами (например, редакторы и администраторы) могут добавлять новые термины, можно использовать следующий более сложный вариант кода:
add_action( 'pre_insert_term', function ( $term, $taxonomy ) {
// Получение настроек текущей таксономии
$tax = get_taxonomies( array(), 'object' )[ $taxonomy ] ?? false;
// Получение определённых разрешений для управления терминами
$cap = $tax->cap->manage_terms ?? false;
return ( $cap && ! current_user_can( $cap ) )
? new WP_Error( 'term_addition_blocked', __( 'Вы не имеете права добавлять новые термины.' ) )
: $term;
}, 0, 2 );
Этот код проверяет права пользователя перед добавлением нового термина. Если пользователь не имеет соответствующих прав, добавление термина будет блокировано.
4. Настройка ролей и возможностей
Также стоит отметить, что вы можете настроить роли и их возможности через админку WordPress или использовать плагины, такие как User Role Editor, для более тонкой настройки. Таким образом, можно изменить права ролей таким образом, чтобы только определённые пользователи имели возможность управлять терминами.
Заключение
Используя указанные методы, вы сможете эффективно контролировать создание тегов на своём сайте WordPress. Это поможет поддерживать порядок в вашей таксономии и позволяет вашим авторам использовать только утверждённые вами теги. Таким образом, ваш подход к управлению контентом станет более структурированным и организованным.