Как использовать if (is_page_template('')) в WordPress

24 янв. 2017 г., 19:35:17
Просмотры: 17.7K
Голосов: 0

Я использую следующий код в своем файле 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.

Кто-нибудь может помочь с этой проблемой?

0
Все ответы на вопрос 4
0

Функция is_page_template() проверяет шаблоны типа записи, указанные в теме с помощью

/**
 * Имя шаблона: Мой шаблон
 */

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

24 янв. 2017 г. 20:23:18
1

Вам необходимо использовать следующую функцию:

is_singular()

Функция is_singular() проверяет, является ли текущая страница шаблоном single.php.

Справка по функции

24 янв. 2017 г. 21:19:35
Комментарии

is_singular() не гарантирует на 100%, что был загружен single.php, так как другие шаблоны из иерархии могут быть загружены раньше.

swissspidy swissspidy
25 янв. 2017 г. 15:05:18
0

Меня всегда удивляет, как долго на форумах 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

17 авг. 2023 г. 13:34:41
1
-1

get_page_template_slug() - Возвращает только шаблон страницы

 global $post;    
    $template = get_page_template_slug($post->ID);         
    if ($template == 'page-template.php') {....}

Возможно, стоит проверить более простой способ

if(is_single()){....}
24 янв. 2017 г. 20:35:06
Комментарии

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

swissspidy swissspidy
25 янв. 2017 г. 15:05:07