Связаться
+79263772075
info@el-komp.ru

Blog

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

Leave a comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

13 + 3 =

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Top Яндекс.Метрика