Как использовать if (is_page_template('')) в WordPress
Я использую следующий код в своем файле functions.php. Я хочу исключить все страницы, которые используют шаблон single.php.
function cat_menu() {
// Проверяем, что страница НЕ использует шаблон single.php
if (!is_page_template('single.php')) {
$cur_cat = get_query_var('cat');
// Получаем список категорий
$new_cats = wp_list_categories('echo=false&child_of=' . $cur_cat .'&depth=1&title_li=&&show_count=0&hide_empty=1');
echo '<ul>' . $new_cats . '</ul>';
}
}
add_action('genesis_after_header', 'cat_menu');
Но я вижу результат также на страницах, которые используют single.php.
Кто-нибудь может помочь с этой проблемой?

Функция is_page_template()
проверяет шаблоны типа записи, указанные в теме с помощью
/**
* Имя шаблона: Мой шаблон
*/
в начале файла шаблона. Она не работает с произвольными файлами шаблонов. Для этого вам стоит посмотреть ответы по ссылке Получение имени текущего файла шаблона. Вы можете взять код из принятого ответа там (функция get_current_template()
), чтобы выполнять действия при условии single.php === get_current_template()
.

Вам необходимо использовать следующую функцию:
is_singular()
Функция is_singular() проверяет, является ли текущая страница шаблоном single.php.

Меня всегда удивляет, как долго на форумах WPSE появляются точные ответы. Вот простой пример использования из StackOverflow:
// если шаблон страницы НЕ определен
<?php if (!is_page_template('page-templates/all-sponsor-template.php')); ?>
// Действия
<?php endif; ?>
// если шаблон страницы определен
<?php if (is_page_template('page-templates/all-sponsor-template.php')); ?>
// Действия
<?php endif; ?>
Источник: https://stackoverflow.com/questions/58531957/if-is-page-template-not-working-in-header-php

Та же проблема, что и с is_page_template()
. get_page_template_slug()
проверяет только пользовательские шаблоны записей (те, что имеют заголовки /* Template Name: ... */
). Кроме того, is_single()
не гарантирует на 100%, что был загружен single.php
, так как другие шаблоны из иерархии могли быть загружены раньше.
