Вы можете подключиться pre_insert_term
, проверить таксономию и узнать, имеет ли пользователь указанную роль следующим образом:
function disallow_insert_term($term, $taxonomy) {
$user = wp_get_current_user();
if ( $taxonomy === 'post_tag' && in_array('somerole', $user->roles) ) {
return new WP_Error(
'disallow_insert_term',
__('Your role does not have permission to add terms to this taxonomy')
);
}
return $term;
}
add_filter('pre_insert_term', 'disallow_insert_term', 10, 2);
Это не позволит пользователю вставлять новые термины, но позволит им искать и добавлять существующие термины в сообщение.
Имейте в виду, что на экране редактирования поста пользователь может ввести имя термина, который не существует, и нажать клавишу ввода или нажать кнопку добавления, которая добавит термин в DOM, однако в этот момент термин не добавляется в базу данных до тех пор, пока Пользователь публикует или обновляет сообщение, после чего термин будет запрещен.
post_tag
а не какую-то другую таксономиюcategories
или какую- то другую таксономию?wp-config.php
наборе следующих констант,define('WP_DEBUG', true);
,define('WP_DEBUG_LOG', true);
иdefine('WP_DEBUG_DISPLAY', false);
затем в функции фрагмента кода выше, бревенчатым вызовerror_log($taxonomy);
и другой вызовerror_log(implode(', ', $user->roles));
затем добавить тег затем обновить пост, это будет затем создатьdebug.log
файл вwp-content
каталоге. Вам нужно выяснить, вызывается ли эта функция и правильно ли она вводит условный оператор, потому что этот обратный вызов работает для меня.