Как добавить поддержку меток и рубрик для страниц WP?

Несмотря на то, что всё это делается функцией register_taxonomy_for_object_type(), код для каждой таксономии будет разным — отдельно для рубрик, отдельно для меток и отдельно для произвольной таксономии.

Каждый листинг кода будет состоять из двух частей:

  1. Первая часть кода — основная, именно в ней и будет добавляться поддержка определенной таксономии (рубрики, метки и пр.)
  2. Вторая часть кода — это модификация стандартных запросов. Т.е. например вы открыли на сайте страницу архива какой-либо категории, а там отображаются и записи post и страницы page.

Как привязать рубрики к страницам?

Достаточно добавить этот код в 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');

Окей, я вставил весь код выше (и тот, который для категорий и тот, который для тегов) «как есть» в functions.php своей темы, и вот что у меня получилось:

Включаем поддержку рубрик и меток для страниц WordPress
Метабоксы рубрик и меток на странице редактирования страниц (тип поста page) WordPress.

Привязка таксономий к произвольным типам постов

Способ 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');
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также