Как показать родительскую и дочернюю категорию WordPress с помощью другого шаблона?

В настоящее время я пытаюсь создать сайт стиля каталога, и в настоящее время у меня есть родительские категории и дочерние категории.

Прямо сейчас, у меня есть родительские категории, показывающие, и при нажатии ссылки на родительскую категорию я использую category.php для отображения списка дочерних категорий.

Теперь я хочу, чтобы при нажатии ссылки на дочернюю категорию WordPress отображает все записи в этой дочерней категории.

Есть ли условное утверждение или способ, которым у меня могут быть дочерние категории, перейти к archive.php чтобы он мог отображать что-то еще?

Сейчас родительские и дочерние категории тянут из category.php , поэтому они становятся одной и той же страницей.

Solutions Collecting From Web of "Как показать родительскую и дочернюю категорию WordPress с помощью другого шаблона?"

Вы можете сделать это несколькими способами.

  1. Проверяя глубину категории / подкатегории. Если мы просматриваем основные / родительские категории, тогда показываем собственный шаблон, если мы находимся в подкатегориях, тогда показываем другой шаблон, и это продолжается.
  2. Мы можем проверить, является ли категория конечной категорией нет. Конечная категория означает, что если категория не имеет какого-либо дочернего элемента, тогда она должна показывать шаблон default.php по умолчанию.

Какой метод вы должны использовать, зависит от ваших требований к проекту. Здесь я буду объяснять первый, потому что он очень гибкий, и я думаю, что он подойдет вашей цели.

WordPress имеет функцию template_include которая выполняется непосредственно перед тем, как WordPress включает предопределенный файл шаблона. Это можно использовать для переопределения поведения шаблона WordPress по умолчанию.

 function wpse_template_check( $template ) { if ( is_category() ) { // Get category information $cat = get_query_var( 'cat' ); $cats_str = get_category_parents( $cat, false, '%#%' ); $cats_array = explode('%#%', $cats_str); $cat_depth = sizeof( $cats_array )-2; // Check category depth $new_template = locate_template( array( 'category-custom-template.php' ) ); if ( $cat_depth == 0 && '' != $new_template ) { return $new_template; } } return $template; } add_filter( 'template_include', 'wpse_template_check' ); 

Эта функция вычисляет глубину категории и проверяет, являются ли текущие категории основными / родительскими. Если это правда и шаблон категории существует, он заменит шаблон category-custom-template.php на category-custom-template.php .

Я тестировал его, и он работает, но вы должны заметить, что он основан на глубине категории, поэтому все родительские категории будут иметь один и тот же настраиваемый шаблон.

Хотя вы можете настроить эту функцию, чтобы сделать больше и соответствовать вашим требованиям.

Кажется, я понимаю, что вы имеете в виду. По умолчанию, когда нажата категория и вы попадаете на страницу категории, отображаются сообщения из текущей категории и всех ее дочерних категорий

По умолчанию построены страницы категорий. Основной запрос (который также использует WP_Query ) использует tax_query для вызова сообщений из страниц tax_query db и таксономии. tax_query на страницах категорий и страницах таксономии точно такие же, как практически нет разницы между tax_query в категории таксономии и пользовательскими таксономиями. См. Это сообщение для объяснения.

По умолчанию, если вы посмотрите на tax_query , параметр include_children имеет значение true, что означает, что также учитываются дочерние условия текущего запроса. Таким образом, вам просто нужно установить этот параметр в значение false. Для этого вам нужно будет использовать фильтр parse_tax_query

Вы можете просто сделать что-то подобное в вашем файле functions.php ( требуется PHP 5.3+ )

 add_filter( 'parse_tax_query', function ( $query ) { if ( ! is_admin() && $query->is_main_query() && $query->is_category() ) { $query->tax_query->queries[0]['include_children'] = 0; } } 

Это гарантирует, что при нажатии на категорию будут отображаться только сообщения из этой конкретной категории, а также не от ее детей