Как добавить рубрики и метки к страницам WordPress
Рубрики и метки помогают вам в сортировке вашего контента и облегчают пользователям поиск по сайту. При создании записи в WordPress и рубрики, и метки могут быть одинаково полезны для организации вашего контента. По-умолчанию, и рубрики и метки могут быть добавлены исключительно записям блога, поэтому когда вы создаете новую страницу в WordPress, вы заметите, что нет соответствующих настроек для добавления рубрик или тегов к вашей странице в WordPress. Недавно один из наших читателей спрашивал, есть ли способ назначать и рубрики и тегами и записям и страницам. Как обычно, для этого есть соответствующий плагин. В этой статье мы покажем вам как добавлять к странице метки и рубрики от записей.
Для начала вам будет необходимо установить и активировать плагин Post Tags and Categories for Pages. После активации переходим в меню Страницы » Добавить новую, где вы найдете рубрики записей и метки, которые стали доступными также и для страниц. Вот и все. Ничего не нужно настраивать. Плагин работает «из коробки».
Что делает плагин, так это модифицирует стандартные таксономии рубрик и меток и ассоциирует их с типом записей Страницы, наряду с Записям блога. Например, у нас есть рубрика под названием “books”, которую вы используете для сортировки ваших записей. Используя этот плагин, вы легко можете добавить страницу и занести ее в ту же рубрику Books, и эта страница появится в архиве рубрики наряду с обычными записями.
Надеемся, что эта статья помогла вам добавить рубрики и метки от записей к вашим страницам WordPress. А вы используете рубрики и теги для страниц? Если да, напишите в каких случаях вы это делаете в комментариях ниже.
Как добавить поддержку меток и рубрик для страниц WP?
Несмотря на то, что всё это делается функцией register_taxonomy_for_object_type(), код для каждой таксономии будет разным — отдельно для рубрик, отдельно для меток и отдельно для произвольной таксономии.
Каждый листинг кода будет состоять из двух частей:
- Первая часть кода — основная, именно в ней и будет добавляться поддержка определенной таксономии (рубрики, метки и пр.)
- Вторая часть кода — это модификация стандартных запросов. Т.е. например вы открыли на сайте страницу архива какой-либо категории, а там отображаются и записи 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 своей темы, и вот что у меня получилось:

Метабоксы рубрик и меток на странице редактирования страниц (тип поста 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');
Смотрите также
- Как вывести рубрики в две колонки?
- register_taxonomy_for_object_type() — присваивает таксономию указанному типу постов
- register_taxonomy() — создание таксономии
- Метабоксы в WordPress
Миша
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Пишите, если нужна помощь с сайтом или разработка с нуля.
Комментарии — 30
Мария 12 Июн 2015
Спасибо, очень пригодилась статья!
alx dh 24 Июн 2015
А как в функции true_expanded_request_custom($q) добавить к категориям еще и тэги, и произвольную таксономию custom_tax?
В синтаксисе плаваю и вообще. ))
Заранее спасибо.
Миша 25 Июн 2015
Вот тут есть описание query-параметров truemisha.ru/blog/wordpress/get_query_var.html. Например:
$q['tag_id'] = 50;
Ира 28 Июл 2015
Скажите пожалуйста а как привязать к странице к рубрики?
Миша 28 Июл 2015
Извините, а код из статьи у вас не заработал?
Ира 29 Июл 2015
Заработал, но только все наоборот надо чтоб страницы к рубрикам привязывались
Миша 31 Июл 2015
Тогда думаю вам нужно это.
Ира 31 Июл 2015
Спасибо, но это не то что нужно, не сильна совсем в кодах
Наташа 11 Авг 2015
У меня тот же вопрос что и у Иры, теперь страницы в рубриках отображаются, а надо чтобы определенная рубрика на страницу выводилась, т.е страница не была статичной, а наполнялась определенной рубрикой.. Заранее спасибо!
Andy 5 Сен 2015
У меня код не заработал. Ошибку выдает при сохранении страницы, для которой была выбрана рубрика.
То есть, meta box на «страницах» отображается, но толку от него, если при сохранении белый фон и предупреждение: Warning: Cannot modify header information — headers already sent by (output started at W:\domains\travel\wp-content\themes\mosaic\functions.php:1) in W:\domains\travel\wp-admin\post.php on line 235 Warning: Cannot modify header information — headers already sent by (output started at W:\domains\travel\wp-content\themes\mosaic\functions.php:1) in W:\domains\travel\wp-includes\pluggable.php on line 1178
Andy 5 Сен 2015
Простите. ошибка в кодировке. Код работает, спасибо! Но только в бэк-энде.
Александр 19 Сен 2015
Здравствуйте! Как я могу получить массив с рубриками, привязанными к странице?
Привязал 2 рубрики, вардамплю:
$id = get_the_ID(); var_dump( get_page($id) );
object(WP_Post)#7343 (24) < ["ID"]=>int(11) ["post_author"]=> string(1) "1" ["post_date"]=> string(19) "2014-09-27 17:39:00" ["post_date_gmt"]=> string(19) "2014-09-27 10:39:00" ["post_content"]=> string(0) "" ["post_title"]=> string(12) "Статьи" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(6) "closed" ["post_password"]=> string(0) "" ["post_name"]=> string(8) "articles" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2015-09-19 08:19:05" ["post_modified_gmt"]=> string(19) "2015-09-19 01:19:05" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(34) "http://a839288a8932.tmweb.ru/?page_id=11" ["menu_order"]=> int(3) ["post_type"]=> string(4) "page" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" >
О привязанных рубриках никакого упоминания..
Миша 19 Сен 2015
Здравствуйте!
get_the_category() должно помочь.
Александр 19 Сен 2015
Благодарю! Помогло. Статьи у вас отличные! Спасибо
Мария 22 Ноя 2015
Михаил, добрый день.
Уже не первый раз нахожу ваши полезные статьи в поисковике по разным запросам. Теперь уже вижу домен и жму для перехода на сайт, т.к. знаю, что тут все по делу))
Михаил, у меня вопрос такой: а на главное страницы будут в этом случае выводиться? В ленту рсс уходить? Мне бы не надо. То есть, я жду от этой функции, что страницы с полезной информацией будут добавляться как бы фоном, незаметно для пользователей, но в то же время для заинтересованных в рубрике и по тегу страницы отображаться будут.
Например, есть рубрика «Бали», тег «Авиа». Я создала запись про аэропорт Денпасар, понятно, что в рассылке это никому неинтересно читать, да и на главной вовсе необязательно это афишировать, эта запись просто для поискового трафика. Вот думаю подобные статьи создавать страницами, но чтобы в рубриках или как минимум по тегам они фигурировали, но в общей ленте не шли.
Если я сделаю функционал в вашей статье, это так и будет работать, или же страницы будут себя вести как и записи блога? Спасибо!
Миша 23 Ноя 2015
Добрый день!
Страницы появятся только в рубриках 🙂
Мария 28 Ноя 2015
Михаил, спасибо!
Все отлично работает! Прям как надо))
Никита 16 Ноя 2016
Михаил здравствуйте! Во-первых отличный блог, много полезной информации, спасибо Вам) Теперь собственно сабж:
Проделал все как написано в статье, но что-то не могу понять что изменилось, страница отображается так, будто не имеет к рубрике никакого отношения. Ожидал увидеть примерно следующее:
Создал страницу, привязал к рубрике. При переходе в рубрику, отображается ссылка на эту страницу. Переходим по ссылке и открывается та самая страница. Но сейчас даже в хлебных крошках не выстраивается нужная иерархия. Объясню что нужно: Есть несколько рубрик, условно:
-Дома кирпичные
-Дома из бруса
.
В каждой рубрике есть что-то похожее на меню:
-Дома кирпичные
—Описание(просто текст)
—Проекты(список постов)
—Отзывы(список постов)
.
-Дома из бруса
—аналогичные пункты В итоге иерархия должна строиться след. образом:
Дома кирпичные -> Описание
Дома кирпичные -> Проекты -> Проект 1
и т.д. Реализовал бы все через вложенные рубрики, но сложность в том, что для пунктов в которых есть посты нужен уникальный шаблон. Надеюсь понятно объяснил) Подскажите пожалуйста в какую сторону копать, как-то дорабатывать Ваше решение, или может есть другой вариант? Спасибо!
Миша 17 Ноя 2016
Добрый день!
спасибо! По идее этот код делает две вещи:
1) добавляет возможность при редактировании страницы определить рубрику для неё
2) на самой рубрике выводить помимо записей еще и страницы. По идее код этот в своё время использовался и должен работать. У вас второй пункт не работает я верно понимаю? Рубрика вообще пустая или в ней только записи отображаются сейчас?
Никита 17 Ноя 2016
Первый пункт работает. Второй нет. В рубрике выводятся записи, но не выводятся страницы. Ну и я так полагаю что не строятся хлебные крошки в нужном порядке, а надо бы) Спасибо!
Миша 18 Ноя 2016
Попробуйте этот код вставить в functions.php темы:
function tr_pre_redefining_query( $query ) { if ( $query->is_category ) { // если рубрика $query->set('post_type', array('post', 'page')); // ставим тип и записи и страницы } return $query; } add_filter('pre_get_posts', 'tr_pre_redefining_query');
Никита 20 Ноя 2016
Спасибо! Сейчас вывелась ссылка на страницу, но по прежнему хлебные крошки ее как-будто не видят. И еще такой момент: Заметил что если какой-то кастомный шаблон(category-
Миша 21 Ноя 2016
То есть при переходе на страницу в хлебных крошках не появляется рубрика, к которым она принадлежит? Про кастомный шаблон — не понял про ссылку. Имеется ввиду, что страницы не появляются в цикле?
Никита 21 Ноя 2016
Да, при переходе на страницу в хлебных крошках идет: Главная -> Страница, рубрики между ними нет. По кастомному шаблону тоже верно, если это просто стандартный цикл то все выводится, если с параметрами то нет. Решил сделать по-другому, т.к. время поджимает. Сделал следующим образом:
1) Создал страницы(как основные разделы), к ним создал подстраницы(как подразделы).
2) Через плагин произвольных полей(ACF) создал поле для страниц «Привязка к рубрике».
3) При создании страниц, привязывается рубрика и выбирается кастомный шаблон для страницы. Дальше все кодом. Но и здесь столкнулся с проблемой. Т.к. рубрика и страница имеют одинаковые урлы, приоритет отдается рубрике, и шаблон уже не работает. В общем запутался( Подскажите пожалуйста как лучше сделать? Спасибо!
Миша 22 Ноя 2016
Лучше вернуться к моему способу, просто цикл с параметрами у вас неправильно задается — добавьте к нему везде как минимум ещё параметр
'post_type' => array('page','post')
Никита 28 Ноя 2016
Михаил здравствуйте! Снова я) Попробовал добавить параметр что Вы написали. Теперь страница выводится, но урл все равно формируется неправильно(в хлебных крошках соответственно тоже). По логике должно быть так:
корень-сайта/рубрика/страница
а работает так:
корень-сайта/страница
Цикл выглядит так:
$cat, 'orderby' => 'ID', 'order' => 'DESC', 'post_type' => array('page','post') ); query_posts($args); if ( have_posts() ) : while ( have_posts() ) : the_post();?>
Как вообще решить эту задачу? Спасибо!
Миша 28 Ноя 2016
Здравствуйте, данная статья не затрагивает ни URL, ни хлебных крошек. И к сожалению статей на эту тему у меня нет.
Гость 1 Мар 2020
Спасибо за статью, пользуюсь этим кодом несколько лет, но возможно пришла пора его обновить — почему-то не работает с Gutenberg’ом — не отображаются ни Рубрики ни Метки. Нашел вот такое решение, но терзают смутные сомнения и нужно мнение специалиста — всё ли здесь хорошо и всё ли предусмотрено:
function my_add_taxonomies_to_pages() { register_taxonomy_for_object_type( 'post_tag', 'page' ); register_taxonomy_for_object_type( 'category', 'page' ); } add_action( 'init', 'my_add_taxonomies_to_pages' ); if ( ! is_admin() ) { add_action( 'pre_get_posts', 'category_and_tag_archives' ); } function category_and_tag_archives( $wp_query )
Разница между записями и страницами в WordPress

Многие люди, только что познакомившиеся с WordPress, очень часто не могут понять принципиальной разницы между записями и страницами. Хотя она существенная и созданы они совсем для разных целей. Попробуем разобраться в их предназначении.
Для чего нужны страницы?
Страницы представляют собой автономные кусочки сайта, которые нельзя привязать к рубрикам, но можно привязать к другим страницам. Если записи служат для публикации большого объема взаимосвязанных статей, то страница, как правило, сама по себе и не связана с другими страницами на сайте. Они как правило либо не меняются, либо меняются очень редко.
Она создается с целью донести до посетителя конкретную информацию, которая будет редко меняться или же для которой нужно особое оформление. Например: страницы контактов, об автореи т.д.
Что касается особого оформления. У страниц есть так называемые шаблоны страниц, которые могут полностью изменить дизайн конкретной страницы. Такого нет у записей. И это еще одно отличие. Очень полезное, кстати. Ведь благодаря ему вы можете сделать уникальным часть сайта. Очень часто возникает необходимость сделать страницы контактов или какие-либо другие страницы отличными по дизайну от обычных записей, тут на помощь и придут шаблоны страниц.
Страницы не выводятся на главной по-умолчанию, но выводятся в меню, если вы не настроили свое собственное меню.
Страницы нельзя группировать в рубрики и это является главным отличием от записей. Из за этого схожие страницы очень неудобно объединять. Придется создавать отдельную родительскую страницу, которая будет содержать в себе дочерние. Странный подход, если есть рубрики в записях. Поэтому страницы друг с другом все таки не должны быть связаны.
С другой стороны вам может понадобиться уникальный дизайн для определенных рубрик, но и тут можно обойтись без страниц. К примеру, задать уникальный стиль для определенной рубрики, проверив ее с помощью встроенной функции WP is_category(). Или же с помощью форматов записей.
Для чего нужны записи?

Записи в отличии от страниц можно группировать в рубрики. И это очень удобно для отображения новостей, блогов или же статей на сайте. Также во многих виджетах нас просят выбрать рубрику для отображения, что позволяет нам выводить только нужные посты. Провернуть такой трюк с помощью страниц не получится, ведь они «одиночки».
Записи выводятся на главной в только, что созданном блоге и их нельзя добавить напрямую в произвольное меню, только через ссылку.
Также есть формат записей. Очень удобная штука, если ей пользоваться.
К примеру, вы хотите по особенному оформить галереи с изображениями.
Для Pro :
Более подробно узнать о том, как пользоваться форматами вы можете узнать тут.
Также у записей есть метки. Очень часто их путают с рубриками, но так делать не нужно. Метки, в отличие от рубрик, более конкретные. Если рубрики содержат группу записей, то метки конкретизируют конкретную запись. К примеру: есть рубрика «Компьютеры» и в ней записи с меткой «Установлена Windows 8». Создавать отдельную рубрику для этого нет смысла, так как пользователю редко бывает интересная какая версия установлена, а вот связать с помощью меток похожие записи очень даже можно.
Также с помощью меток, можно связывать похожие статьи. Так как, метки более полно отражают суть статьи, чем рубрики.
Заключение
Надеюсь вы поняли разницу между различными типами постов и будете использовать их по назначению. WordPress очень простая в освоении платформа, но в ней есть нюансы которые новички сразу не замечают. Надеюсь статья помогла вам разобраться.
Свой шаблон для всех подкатегорий одной рубрики wordpress
У основной рубрики услуги есть свой шаблон category-uslugi.php У этой рубрики очень много подрубрик. Как всем этим подрубрикам именно этой категории услуги сделать свой шаблон, который отличается от основных шаблонов category-uslugi.php и category.php?
Отслеживать
задан 10 фев 2021 в 9:17
Oleg zyuzin Oleg zyuzin
5 1 1 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Как всем этим подрубрикам именно этой категории услуги сделать свой шаблон, который отличается от основных шаблонов category-uslugi.php и category.php?
Можно в category-uslugi.php (или category.php ) сделав проверку на соответствие наличия подрубрик (с пом get_term_parents_list()) подключать произвольный шаблон с пом. load_template()
