Несмотря на то, что всё это делается функцией 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
своей темы, и вот что у меня получилось:
Тут всё проще — достаточно при регистрации таксономии указать все необходимые типы постов в параметре $object_type
функции register_taxonomy().
$taxonomy = ''; // название таксономии $object_type = array(); // тут и указываем все необходимые типы постов в виде массива $args = array(); // параметры таксономии register_taxonomy( $taxonomy, $object_type, $args );
А что, если у нас нет доступа к параметрам функции 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');
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Спасибо, очень пригодилась статья!
А как в функции true_expanded_request_custom($q) добавить к категориям еще и тэги, и произвольную таксономию custom_tax?
В синтаксисе плаваю и вообще... ))
Заранее спасибо.
Вот тут есть описание query-параметров truemisha.ru/blog/wordpress/get_query_var.html.
Например:
Скажите пожалуйста а как привязать к странице к рубрики?
Извините, а код из статьи у вас не заработал?
Заработал, но только все наоборот надо чтоб страницы к рубрикам привязывались
Тогда думаю вам нужно это.
Спасибо, но это не то что нужно, не сильна совсем в кодах
У меня тот же вопрос что и у Иры, теперь страницы в рубриках отображаются, а надо чтобы определенная рубрика на страницу выводилась, т.е страница не была статичной, а наполнялась определенной рубрикой.. Заранее спасибо!
У меня код не заработал. Ошибку выдает при сохранении страницы, для которой была выбрана рубрика.
То есть, 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
Простите... ошибка в кодировке.
Код работает, спасибо! Но только в бэк-энде.
Здравствуйте! Как я могу получить массив с рубриками, привязанными к странице?
Привязал 2 рубрики, вардамплю:
Вывод:
О привязанных рубриках никакого упоминания..
Здравствуйте!
get_the_category() должно помочь.
Благодарю! Помогло. Статьи у вас отличные! Спасибо
Михаил, добрый день.
Уже не первый раз нахожу ваши полезные статьи в поисковике по разным запросам. Теперь уже вижу домен и жму для перехода на сайт, т.к. знаю, что тут все по делу))
Михаил, у меня вопрос такой: а на главное страницы будут в этом случае выводиться? В ленту рсс уходить? Мне бы не надо... То есть, я жду от этой функции, что страницы с полезной информацией будут добавляться как бы фоном, незаметно для пользователей, но в то же время для заинтересованных в рубрике и по тегу страницы отображаться будут.
Например, есть рубрика "Бали", тег "Авиа". Я создала запись про аэропорт Денпасар, понятно, что в рассылке это никому неинтересно читать, да и на главной вовсе необязательно это афишировать, эта запись просто для поискового трафика. Вот думаю подобные статьи создавать страницами, но чтобы в рубриках или как минимум по тегам они фигурировали, но в общей ленте не шли.
Если я сделаю функционал в вашей статье, это так и будет работать, или же страницы будут себя вести как и записи блога? Спасибо!
Добрый день!
Страницы появятся только в рубриках :)
Михаил, спасибо!
Все отлично работает! Прям как надо))
Михаил здравствуйте! Во-первых отличный блог, много полезной информации, спасибо Вам) Теперь собственно сабж:
Проделал все как написано в статье, но что-то не могу понять что изменилось, страница отображается так, будто не имеет к рубрике никакого отношения. Ожидал увидеть примерно следующее:
Создал страницу, привязал к рубрике. При переходе в рубрику, отображается ссылка на эту страницу. Переходим по ссылке и открывается та самая страница. Но сейчас даже в хлебных крошках не выстраивается нужная иерархия. Объясню что нужно:
Есть несколько рубрик, условно:
-Дома кирпичные
-Дома из бруса
...
В каждой рубрике есть что-то похожее на меню:
-Дома кирпичные
--Описание(просто текст)
--Проекты(список постов)
--Отзывы(список постов)
...
-Дома из бруса
--аналогичные пункты
В итоге иерархия должна строиться след. образом:
Дома кирпичные -> Описание
Дома кирпичные -> Проекты -> Проект 1
и т.д.
Реализовал бы все через вложенные рубрики, но сложность в том, что для пунктов в которых есть посты нужен уникальный шаблон. Надеюсь понятно объяснил) Подскажите пожалуйста в какую сторону копать, как-то дорабатывать Ваше решение, или может есть другой вариант? Спасибо!
Добрый день!
спасибо!
По идее этот код делает две вещи:
1) добавляет возможность при редактировании страницы определить рубрику для неё
2) на самой рубрике выводить помимо записей еще и страницы.
По идее код этот в своё время использовался и должен работать. У вас второй пункт не работает я верно понимаю? Рубрика вообще пустая или в ней только записи отображаются сейчас?
Первый пункт работает. Второй нет. В рубрике выводятся записи, но не выводятся страницы. Ну и я так полагаю что не строятся хлебные крошки в нужном порядке, а надо бы) Спасибо!
Попробуйте этот код вставить в
functions.php
темы:Спасибо! Сейчас вывелась ссылка на страницу, но по прежнему хлебные крошки ее как-будто не видят. И еще такой момент: Заметил что если какой-то кастомный шаблон(category-{ID}.php), то ссылка на страницу уже не выводится, а если по умолчанию, то работает как нужно. Можно ли как-то победить обе проблемы? Спасибо!
То есть при переходе на страницу в хлебных крошках не появляется рубрика, к которым она принадлежит?
Про кастомный шаблон - не понял про ссылку. Имеется ввиду, что страницы не появляются в цикле?
Да, при переходе на страницу в хлебных крошках идет: Главная -> Страница, рубрики между ними нет.
По кастомному шаблону тоже верно, если это просто стандартный цикл то все выводится, если с параметрами то нет.
Решил сделать по-другому, т.к. время поджимает. Сделал следующим образом:
1) Создал страницы(как основные разделы), к ним создал подстраницы(как подразделы).
2) Через плагин произвольных полей(ACF) создал поле для страниц "Привязка к рубрике".
3) При создании страниц, привязывается рубрика и выбирается кастомный шаблон для страницы. Дальше все кодом.
Но и здесь столкнулся с проблемой. Т.к. рубрика и страница имеют одинаковые урлы, приоритет отдается рубрике, и шаблон уже не работает. В общем запутался( Подскажите пожалуйста как лучше сделать? Спасибо!
Лучше вернуться к моему способу, просто цикл с параметрами у вас неправильно задается - добавьте к нему везде как минимум ещё параметр
Михаил здравствуйте! Снова я) Попробовал добавить параметр что Вы написали. Теперь страница выводится, но урл все равно формируется неправильно(в хлебных крошках соответственно тоже). По логике должно быть так:
корень-сайта/рубрика/страница
а работает так:
корень-сайта/страница
Цикл выглядит так:
Как вообще решить эту задачу? Спасибо!
Здравствуйте,
данная статья не затрагивает ни URL, ни хлебных крошек. И к сожалению статей на эту тему у меня нет.
Спасибо за статью, пользуюсь этим кодом несколько лет, но возможно пришла пора его обновить - почему-то не работает с Gutenberg’ом - не отображаются ни Рубрики ни Метки.
Нашел вот такое решение, но терзают смутные сомнения и нужно мнение специалиста - всё ли здесь хорошо и всё ли предусмотрено:
В целом вроде норм.
Большое спасибо. Значит буду пользоваться.