Intereting Posts
Комментарий Уокер против Обратной связи не удается загрузить /wp-admin/admin-ajax.php локально Редактор / Добавить медиа: возможно ли разрешать только галереи? Переписывать и настраивать тип сообщения: заказ по настраиваемому полю не работает Query add html после заданного количества сообщений? Доставка шаблонов страниц с помощью плагинов Пользовательская лицензия для плагина WordPress Комментарий «как» проблема – «пользователи, которым нравится этот» аватар, связанный с текущим профилем пользователя, а не с профилем «liker» css3-mediaqueries-js не работает с дочерней темой Показать последние сообщения в категории с Twenty Ten theme widget Как писать «безопасные» плагины? Как передать переменную от PHP до LESS? Продолжайте получать постоянную ссылку с WP_Query? Подписка и уведомления на обновленную почту / галерею Rewrite Rule для пользовательской страницы с URL-адресами запроса в URL-адресе

Ориентация родительских категорий

Я хочу создать разные страницы шаблонов для всех родительских категорий и подкатегорий. Я надеялся сделать это, используя иерархию (например, что-то вроде category-parent.php и category-sub.php ), но, глядя на диаграмму последовательности, которую я нашел, я не думаю, что есть опция:

введите описание изображения здесь

Я могу вручную добавить category-$slug.php для родительских категорий (так как они не должны меняться), а затем просто используйте category.php для всего остального (т. Е. Подкатегорий), но есть ли лучший способ?

Вы можете сделать это, используя специальный шаблон и фильтр template_include . category-parent.php и category-sub.php не требуются. Можно custom-category-child.php category.php для родительских категорий и для дочерних категорий, вы можете использовать custom-category-child.php поскольку category-sub.php зарезервирован для иерархии по умолчанию.

  • Сначала создайте файл шаблона в теме custom-category-child.php
  • Затем добавьте этот код в свою тему functions.php

Обновление : как предложил Питер, мы можем использовать category_template вместо template_include чтобы сохранить несколько строк. Кроме того, мы должны вернуть текущий шаблон, если наш пользовательский файл шаблона отсутствует!

Читайте встроенные комментарии

 add_filter('category_template', 'custom_cat_templates'); /** * Create custom template for child categroies * @param type $template * @return type */ function custom_cat_templates($template) { $category = get_category(get_queried_object_id()); //Get the ID for current queried category if ( $category->category_parent > 0 ) { //Check if it child category $sub_category_template = locate_template('custom-category-child.php'); //return our custom template $template = !empty($sub_category_template) ? $sub_category_template : $template; //return default template if custom templaet missing } return $template; } 

Если вы не хотите брать живописный маршрут, отправленный @Sumit ( который ИМХО является лучшим решением ) и нужно делать что-то внутри шаблона категории, вы можете сделать следующее

  • Получить запрашиваемый объект (в настоящее время просматривается категория ). Мы будем использовать $GLOBALS['wp_the_query']->get_queried_object() который на 99,9999% надежнее против get_queried_object() или даже предлагаемой get_the_category() . Вы можете прочитать мой интересный ответ на этот вопрос здесь

  • Используйте get_term() для проверки объекта term ( вы также можете использовать get_category() , но он короткий, get_category() является просто оболочкой для get_term() )

  • Оттуда мы можем получить родительскую категорию и сделать то, что нам нужно сделать

Мы можем попробовать следующее:

 // Get the current category object $category_object = get_term( $GLOBALS['wp_the_query']->get_queried_object() ); // Run our logic according to the value of $parent if ( 0 === $category_object->parent ) { // Category is top level } else { // Category is a descendant } 

Существует другой способ, если вы кодируете то же самое в файле category.php . Проверьте, является ли категория родительской категорией. И если это так, тогда отобразите родительский код. В противном случае покажите дочерний код. Таким образом, вам не нужно создавать несколько файлов для каждой категории.

 $category = get_term(get_queried_object()); if ( $category->category_parent > 0 ) { // Is subcategory } else { // Is parent category }