Как добавить поддержку меток и рубрик для страниц WP?
Как привязать рубрики к страницам?
Достаточно добавить этот код в functions.php
темы
function true_apply_categories_for_pages(){ add_meta_box( 'categorydiv', 'Категории', 'post_categories_meta_box', 'page', 'side', 'normal'); // добавляем метабокс категорий для страниц register_taxonomy_for_object_type('category', 'page'); // регистрируем рубрики для страниц } // обязательно вешаем на admin_init add_action('admin_init','true_apply_categories_for_pages'); function true_expanded_request_category($q) { if (isset($q['category_name'])) // если в запросе присутствует параметр рубрики $q['post_type'] = array('post', 'page'); // то, помимо записей, выводим также и страницы return $q; } add_filter('request', 'true_expanded_request_category');
Как привязать метки к страницам?
function true_apply_tags_for_pages(){ add_meta_box( 'tagsdiv-post_tag', 'Теги', 'post_tags_meta_box', 'page', 'side', 'normal' ); // сначала добавляем метабокс меток register_taxonomy_for_object_type('post_tag', 'page'); // затем включаем их поддержку страницами wp } add_action('admin_init','true_apply_tags_for_pages'); function true_expanded_request_post_tags($q) { if (isset($q['tag'])) // если в запросе присутствует параметр метки $q['post_type'] = array('post', 'page'); return $q; } add_filter('request', 'true_expanded_request_post_tags'); Окей, я вставил весь код выше (и тот, который для категорий и тот, который для тегов) «как есть» в<code>functions.php</code> своей темы, и вот что у меня получилось: <a href="https://www.el-komp.ru/wp-content/uploads/2016/10/post-tags-and-categories-page-support.png"><img class="alignnone size-medium wp-image-2124" src="https://www.el-komp.ru/wp-content/uploads/2016/10/post-tags-and-categories-page-support-300x238.png" alt="post-tags-and-categories-page-support" width="300" height="238" /></a>
Привязка таксономий к произвольным типам постов
Способ 1. register_taxonomy()
Тут всё проще — достаточно при регистрации таксономии указать все необходимые типы постов в параметре $object_type
функции register_taxonomy().
$taxonomy = ''; // название таксономии $object_type = array(); // тут и указываем все необходимые типы постов в виде массива $args = array(); // параметры таксономии register_taxonomy( $taxonomy, $object_type, $args );
Способ 2. register_taxonomy_for_object_type() и фильтр «request»
А что, если у нас нет доступа к параметрам функции register_taxonomy()? Что, если она является частью плагина или темы, и установленные нами параметры будут сбрасываться каждый раз при обновлении?
Тогда будем использовать такой же способ привязки, который актуален для рубрик и меток.
В данном примере привязываем рубрики к произвольному типу постов product
.
function true_apply_taxonomy_for_post_type(){ // add_meta_box() в данном случае не нужен register_taxonomy_for_object_type('category', 'product'); } add_action('admin_init','true_apply_taxonomy_for_post_type'); function true_expanded_request_custom($q) { if (isset($q['category_name'])) // для произвольных таксономий нужно использовать их название, например $q['product_category'] $q['post_type'] = array('post', 'product'); return $q; } add_filter('request', 'true_expanded_request_custom');
Спасибо: https://truemisha.ru/blog/wordpress/tags-and-categories-for-pages.html