Иногда в блоге, в котором пишут множество авторов, нужно запретить создание новых тегов. Администратор сам определяет, какие теги в блоге можно использовать, и ему не нужно, чтобы появлялись дубликаты, синонимы, непонятные метки, слова с ошибками. Сделать это можно двумя способами – запретить запись тегов при сохранении поста, и скрывать от авторов в редакторе строку ввода тегов.
Чтобы запретить ввод новых тегов, достаточно скрыть строку ввода в редакторе. Сделать это можно, если вставить следующий код в файл functions.php:
function disable_tags() { ?> jQuery(document).ready(function() { jQuery('#new-tag-post_tag').attr("disabled", "disabled").css("display", "none"); jQuery('.tagadd').attr("disabled", "disabled").css("display", "none"); jQuery('#post_tag').css("display", "none"); }); <?php } add_action('admin_head', 'disable_tags');
Для автора останутся доступными уже имеющиеся в блоге теги – их можно выбрать из списка наиболее популярных.
Можно вообще поступить кардинально – запретить сохранение тегов при написании, редактировании и сохранении постов. Для этого нужно вставить в файл functions.php следующий код:
add_filter( 'pre_post_tags_input', 'no_tags_input_create' ); add_filter( 'pre_post_tax_input', 'no_tax_input_create' ); function no_tags_input_create($tags_input) { $output = array(); foreach( $tags_input as $tag ) if( term_exists( $tag, 'post_tag') ) $output[] = $tag; return $output; } function no_tax_input_create($tax_input) { if( !isset($tax_input['post_tag']) ) return $tax_input; $output = array(); $tags = explode(',', $tax_input['post_tag']); foreach( $tags as $tag ) if( term_exists( $tag, 'post_tag') ) $output[] = $tag; $tax_input['post_tag'] = implode(',',$output); return $tax_input; }
В этом случае теги к постам будет добавлять в ручном режиме сам администратор.
Однако меня интересует еще более продвинутый вариант – как сделать, чтобы авторы могли вводить во втором случае любые теги, но сохранялись бы при написании нового поста только те, которые уже существуют в блоге?