Intereting Posts
Почему возникает фатальная ошибка: вызов неопределенной функции get_most_recent_post_of_user ()? Использование расширенного настраиваемого поля для загрузки файлов, как загрузить файл url Два файла «.htaccess», расположенные в разных каталогах? Как WordPress шифрует пароль? Как создать многоуровневую навигацию Bootstrap Удалить по умолчанию quicktags Создайте пользовательские функции.php для страниц AMP Что условно использовать для динамической проверки боковой панели? Как перейти от wordpress.com к самообслуживаемому wordpress как получить shortcode в галерее один единственный список UL вместо нескольких DL? Разрешить вызов AJAX для других ролей, чем admin Значение метаданных запроса запроса WP Загрузить CSS-условие для настраиваемого поля. quicktags "link" кнопка не работает, но все остальные кнопки делают Как настроить таргетинг на дочернюю тему с помощью get_bloginfo () ;?

Если (категория / тег отмечен), то (display header2php)

У меня есть 3 заголовка (header.php, header2.php и header3.php). Я хочу всегда отображать header.php вверху. Ниже header.php, я хочу, чтобы второй заголовок отображался в зависимости от категории. Если сообщение – Гризли-медведи, я хочу header2. Если сообщение «Трубы мира», мне нужен заголовок3.

Я понимаю, что отображается 2 заголовка:

<?php get_header(); get_header(header2); ?> 

Но как я могу сделать второй заголовок зависимым от того, помечена ли категория (или добавлен тег, чтобы завершить этот вопрос)?

EDIT: Из-за помощи jgraup и karpstrucking я вижу, что этот вопрос не является полным:

С помощью …

 if ( has_category( 'Grizzly Bears' ) ) { get_header( 'header2' ); } else if ( has_category( 'Peace Pipes' ) ) { get_header( 'header3' ); } 

… работает только в том случае, если has_category является самой детской категорией. Я хотел бы применить условие к самой родительской категории. Этот код не подходит для этого. Например, я проверяю родительскую категорию «Grizzly Bears» и дочернюю категорию «Grizzly Bears Fishing», и я не могу использовать код для «Grizzly Bears».

Спасибо, JM

Вы можете использовать функцию has_category () для этого:

 if ( has_category( 'Grizzly Bears' ) ) { get_header( 'header2' ); } else if ( has_category( 'Peace Pipes' ) ) { get_header( 'header3' ); } 

Вы также можете добавить функцию has_tag . Оба принимают массив идентификаторов терминов, имен или слизней, если вы хотите сразу проверить кратность.

Изменить: изменено in_category на has_category для согласованности и потенциального будущего устаревания

ИЗМЕНИТЬ ОТ КОММЕНТАРИИ

Все, что я хочу сделать, в этом случае отображает заголовок (заголовок) 2 -IF – сообщение имеет определенную категорию. Я мог бы иметь только «медведей гризли» или мог иметь как «медведей гризли», так и своего ребенка «Гризли несет рыбу», или у меня может быть еще один ребенок «Гризли медведи», но до тех пор, пока эта категория «Grizzly bears» проверяется, Я хочу, чтобы оператор -THEN- произошел.

Мы все еще можем использовать ту же функцию, которую мы создали в ORIGINAL ANSWER , но мы немного изменим ее. Нам нужно будет получить категории, к которым принадлежит сообщение, а затем проверить, есть ли среди них медведи гризли

 $parent_cat = 1, //Pass the ID, this will ID for 'Grizzly bears' $descendants = get_term_descendants( $parent_cat ); $post_terms = get_the_category( get_the_ID() ); $ids = wp_list_pluck( $post_terms, 'term_id' ); if ( $decendants && !in_array( $parent_cat, $ids ) ) { if ( has_category( $decendants ) ) { // Post belongs to parent cat descendants but not parent cat } } elseif ( in_array( $parent_cat, $ids ) ) { // Post belongs to the parent category } else { // Post does not belong to parent cat or any of its decendants } 

ОРИГИНАЛЬНЫЙ ОТВЕТ

Ваш вопрос немного трудно понять, но я отвечу на то, как я его прочитал.

Если вам нужно применить определенный заголовок для каждого к термину верхнего уровня и всех его потомков, вы можете написать свою функцию, используя get_terms() чтобы вернуть всех потомков из данного родителя верхнего уровня

НЕПРАВИЛЬНЫЕ ПРИМЕЧАНИЯ ПЕРЕД КОДОМ:

  • Код не проверен и может быть ошибкой. Обязательно сначала проверьте это локально с включенной отладкой

  • Код должен содержать не менее PHP 5.4

  • Это может быть довольно многословным, поскольку нам нужно много работать, чтобы получить всех потомков с термина верхнего уровня. Заметьте, я объяснил это, но для повышения производительности удостоверьтесь, что вы передаете идентификатор, а не slug для функции, и не используете имена

КОД

 function get_term_descendants( $term = '', $taxonomy = 'category' ) { // First make sure we have a term set, if not, return false if ( !$term ) return false; // Validate and sanitize taxonomy if ( 'category' !== $taxonomy ) { $taxonomy = filter_var( $taxonomy, FILTER_SANITIZE_STRING ); // Make sure the taxonomy is valid if ( !taxonomy_exists( $taxonomy ) ) return false; // Make sure our taxonomy is hierarchical if ( !is_taxonomy_hierarchical( $taxonomy ) ) return false; } // OK, we have a term and the taxonomy is valid, now we need to validate and sanitize the term if ( is_numeric( $term ) ) { $term = filter_var( $term, FILTER_VAILDATE_INT ); } else { $term_filtered = filter_var( $term, FILTER_SANITIZE_STRING ); $term_object = get_term_by( 'slug', $term_filtered, $taxonomy ); $term = filter_var( $term_object->term_id, FILTER_VAILDATE_INT ); } // Everything is sanitized and validated, lets get the term descendants ids $term_descendants = get_terms( $taxonomy, ['child_of' => $term, 'fields' => 'ids'] ); // Check if we have terms if ( !$term_descendants ) return false; // We have made it, return the descendants return $descendants; } 

Наша функция get_term_descendants() теперь либо проведет массив идентификаторов термина потомка, переданного функции, либо вернет false, если переданный термин не имеет потомков

Теперь мы можем использовать нашу функцию и передать возвращенный массив идентификаторов непосредственно в has_category()

ПРИМЕЧАНИЕ. Вы можете передать идентификатор родительского термина или слизку функции. Не используйте имена, поскольку иерархические термины могут иметь повторяющиеся имена по разным иерархиям. Также обратите внимание: передача slug функции немного дороже, потому что мы будем использовать get_term_by() чтобы получить идентификатор термина из пули. Для повышения производительности старайтесь всегда передавать идентификатор

 $parent_cat = 1, //Pass the ID, can pass the slug, but reread the note above $descendants = get_term_descendants( $parent_cat ); if ( $decendants ) { $term_array = array_merge( $parent_cat, $descendants ); } else { $term_array = $parent_cat; } // Now we can check if the post belongs to the parent cat or one of his descendants if ( has_category( $term_array, $post ) ) { // Post belongs to parent cat or one of his descendants } else { // Post does not belong to the parent or any of his descendants } 

Для всех категорий ( wp_get_post_categories )

Функция wp_get_post_categories () возвращает список категорий для сообщения.

 get_header('header'); 

Условный на основе has_category

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

 if(has_category('bears', $post)) { get_header('header2'); } else if(has_category('pipes', $post)) { get_header('header3'); }