Taxonomy: свой шаблон для дочек или родителей
На сайте создана taxonomy древовидная с rewrite slug: lessons. адрес такой:
example.com/lessons/ (lessons оформлена через кастомный шаблон page-lessons.php, в виде ссылок на рубрики).
В ней есть рубрики:
example.com/lessons/mathematics/
example.com/lessons/russian/
example.com/lessons/geography/
example.com/lessons/history/
example.com/lessons/english/
В этих рубриках есть тоже рубрики, пример:
example.com/lessons/mathematics/9/
example.com/lessons/russian/5/
example.com/lessons/geography/5/
example.com/lessons/history/2/
example.com/lessons/english/10/
Для /mathematics, /russian, /geography, /history, /english используется шаблон taxonomy-lessons.php (также он используется для дочек)
Как задать шаблон для дочек уровня /9, /5, /2, /10 и только. Их много.
Или как задать шаблон для родителей, тобишь для: /mathematics, /russian, /geography, /history, /english?
Спасибо!
Сам шаблон нужно указать через фильтр template_include. В нем нужно проверять все вот это что вам нужно. Например для 9, 5, 6 и т.д. проверяем есть ли родитель и является ли родитель родителя lessons. Используй эти функции: cat_is_ancestor_of() is_category() get_ancestors() get_category()
Примерно будет так: в шаблоне лежит файл
lessons-sub2-tpl.php, который отвечает за вывод 3-го уровня рубрик (5 9 ...) и для второго уровняlessons-sub1-tpl.php:function sub_cat_template( $template ) { $lessons_cat_id = 5; // не рубрика if( ! is_category() ) return $template; $current_cat = get_queried_object(); // не дочерняя рубрика if( ! $current_cat->parent ) return $template; // родственная рубрика главной рубрики lessons if( cat_is_ancestor_of( $lessons_cat_id, $current_cat->term_id ) ){ // второй уровень if( $current_cat->parent == $lessons_cat_id ){ if( $new_template = locate_template( array('lessons-sub1-tpl.php') ) ) $template = $new_template ; } // третий уровень else{ if( $new_template = locate_template( array('lessons-sub2-tpl.php') ) ) $template = $new_template ; } } return $template; } add_filter( 'template_include', 'sub_cat_template', 99 );Код не тестировал, возможны недочеты или мелкие ошибки, но общий принцип думаю понятен
Благодаря этому примеру я придумал более изящнее решение, нужно чтобы код просто проверял, если это родитель то выводим такой то шаблон, если не родитель то выводим обычный. Помогите реализовать код, никак не могу додуматься как сделать, что не так, почему не работает:
function portfolio_page_template( $template ) { $current_cat = get_queried_object(); if( is_category ($current_cat->parent) ){ if ( $new_template = locate_template( array( 'portfolio-page-template.php' ) ) ) $template = $new_template ; } return $template; } add_filter( 'template_include', 'portfolio_page_template', 99 );Вместо
is_category ($current_cat->parent)просто$current_cat->parentfunction portfolio_page_template( $template ) { $current_cat = get_queried_object(); if( $current_cat->parent ){ if ( $new_template = locate_template( array( 'portfolio-page-template.php' ) ) ) $template = $new_template ; } return $template; } add_filter( 'template_include', 'portfolio_page_template', 99 );Тоже не хочет(
Что-то ты не то делаешь! Я не поленился поставил вот этот код в functions.php и создал файл 'portfolio-page-template.php' в теме - все работает!
единственное еще замечание - строку
if( ! is_category() ) return $template;надо оставить... В остальном код работает, если у тебя не работает, то ищи проблему где-то еще...Вот такой код должен быть
function portfolio_page_template( $template ) { if( ! is_category() ) return $template; $current_cat = get_queried_object(); if( $current_cat->parent ){ if ( $new_template = locate_template( array( 'portfolio-page-template.php' ) ) ) $template = $new_template ; } return $template; } add_filter( 'template_include', 'portfolio_page_template', 99 );Да действительно, код работает! Спасибо!
Только немного пришлось поменять
if( ! is_category() ) return $template;наif( ! is_tax('name') ) return $template;Теперь для всех дочек, применяется шаблон
portfolio-page-template.phpКоторый раз Вы ,Kama, спасаете мой сайт) Спасибо Вам!