Как добавить поддержку меток и рубрик для страниц 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