Условный тег для проверки использования 'page.php'?

17 июн. 2014 г., 00:40:54
Просмотры: 17.5K
Голосов: 11

Я пытаюсь проверить, используется ли шаблон page.php или нет. Я пробовал is_page_template( 'page.php' ), но это не работает.

Также я не могу использовать is_page(), потому что мне нужно выполнить действие только при использовании page.php, а не других пользовательских шаблонов страниц.

Пожалуйста, подскажите решение, спасибо!

Редактирование: Следовало упомянуть ранее, что у меня есть файл common-options.php, который подключается почти во всех шаблонах (таких как index.php, page.php, single.php и page_blog.php). В этом файле я пытаюсь выполнить проверку следующим кодом:

if ( is_page_template( 'page.php' ) ) {
    echo "успех!";
}

Но это не работает, когда я открываю страницу, использующую "Шаблон по умолчанию".

4
Комментарии

is_page_template() - это правильная функция, но вы говорите, что она "не работает". Вы проверяете её внутри цикла?

jdm2112 jdm2112
17 июн. 2014 г. 01:15:00

Привет, я проверяю её в файле, который подключаю (используя 'include()') в начале page.php и других файлов. Пожалуйста, посмотрите правку моего вопроса.

user1981248 user1981248
17 июн. 2014 г. 03:40:49

К сожалению, я не могу ответить на свой вопрос на основе вашей правки. Слишком много вариантов без просмотра большего количества вашего кода. Если вы проверяете условие внутри цикла, is_page_template не будет работать. Моя рекомендация - выяснить, какой шаблон используется, а затем отследить причину. Эта функция будет отображать текущий файл шаблона на каждой странице для вошедшего администратора. http://pastebin.com/wkNv9Eug. Добавьте это в functions.php и перезагрузите страницу. Пока ваша тема вызывает wp_head(), вы должны видеть шаблон вверху каждой страницы при входе в систему.

jdm2112 jdm2112
17 июн. 2014 г. 05:58:14

Самый важный вопрос здесь: проверяете ли вы внутри цикла? Вызываете ли вы the_post в вашем шаблоне перед вызовом is_page_template? (is_page_template( 'page.php' в любом случае не будет работать, но это все равно важный вопрос для ответа на ваш исходный вопрос)

engelen engelen
17 июн. 2014 г. 10:47:06
Все ответы на вопрос 7
5
12

Я сам столкнулся с такой же проблемой, и моим решением стал этот код:

if(basename(get_page_template()) === 'page.php'){

}

basename(get_page_template()) получает имя файла шаблона страницы (согласно https://codex.wordpress.org/Function_Reference/get_page_template), а затем мы проверяем, равно ли оно 'page.php'

20 сент. 2016 г. 18:15:06
Комментарии

Не могли бы вы подробнее объяснить, как будет работать этот код?

Ethan Rævan Ethan Rævan
20 сент. 2016 г. 18:29:21

Согласен, это надежное решение, но его можно расширить. +1

Howdy_McGee Howdy_McGee
20 сент. 2016 г. 19:48:26

По крайней мере у меня это возвращает true для любой страницы, даже если используется пользовательский шаблон (отличный от page.php)

Jabel Márquez Jabel Márquez
26 сент. 2017 г. 06:20:44

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

rinogo rinogo
10 авг. 2018 г. 02:10:01

Отлично работает для меня в functions.php с хуком wp enqueue. is_page_template( 'page.php' ) не срабатывал... Интересно, найдется ли кто-то с объяснением...

Friedrich Siever Friedrich Siever
28 авг. 2018 г. 23:41:11
2

У вас есть две полезные функции: is_page() и is_page_template().

Функция is_page() возвращает true, если вы находитесь на странице, а функция is_page_template() возвращает false, если текущая запись (может быть страницей) не использует пользовательский шаблон.

Таким образом, вам просто нужно использовать обе эти функции вместе:

if ( is_page() && !is_page_template() ) {
  // ваш код
}
24 сент. 2018 г. 08:53:00
Комментарии

Думаю, это самый надежный ответ.

Hannah Smith Hannah Smith
17 нояб. 2020 г. 18:42:14

До сих пор отлично работает на текущую дату. Спасибо!

rwzdoorn rwzdoorn
12 янв. 2021 г. 18:12:05
2

Старый вопрос, но интересный.

В целом, в WordPress не принято проверять шаблон. Шаблон — это результат выполнения основного запроса и настройки контекста запроса.

При необходимости я бы, вероятно, установил какой-нибудь флаг в начале page.php, например, объявил константу, чтобы иметь собственный контекст для этого.

Однако в целом это заставляет задуматься, что любую логику, требующую такого подхода, стоит пересмотреть в соответствии с более стандартными механизмами и условными конструкциями.

20 сент. 2016 г. 19:01:52
Комментарии

+1 Любой код, требующий этого условия, вероятно, может быть просто безусловно размещен в page.php

Andy Macaulay-Brook Andy Macaulay-Brook
20 сент. 2016 г. 20:16:11

Я не согласен. В моем случае я пытаюсь подключить JS-скрипт только на стандартной странице page.php, внутри functions.php. Зачем загружать его на других страницах, если он там не нужен? Я действительно считаю, что для этого есть варианты использования.

Jordan Carter Jordan Carter
26 июл. 2018 г. 21:55:53
1

На самом деле это очень просто. Просто используйте:

is_page_template()

Если функция возвращает true, значит page.php не используется, и наоборот :)

2 апр. 2018 г. 09:07:46
Комментарии

Но разве это не вернет false на страницах записей?

Jordan Carter Jordan Carter
26 июл. 2018 г. 21:57:01
0
$bulkitnt_custom_page_control = is_page_template( 'custom-page.php' );

    if( $bulkitnt_custom_page_control != true ){
        do_action('bulkitnt_header_action');
    }
29 июл. 2018 г. 13:22:27
2

Это работает для меня в файле searchbar.php

basename(get_page_template()) === ( 'page.php' )

Вот мой полный код:

if ( is_page_template( 'tpl-ads-home.php' ) || basename(get_page_template()) === ( 'page.php' ) || is_page_template( 'tpl-refine-search.php' ) || is_page_template( 'tpl-categories.php' ) || is_search() || is_404() || is_tax( APP_TAX_CAT ) || is_tax( APP_TAX_TAG ) || is_singular( APP_POST_TYPE ) ) :

    $args = cp_get_dropdown_categories_search_args( 'bar' );
27 июл. 2020 г. 18:11:47
Комментарии

Полный код

<?php if ( is_page_template( 'tpl-ads-home.php' ) || basename(get_page_template()) === ( 'page.php' ) || is_page_template( 'tpl-refine-search.php' ) || is_page_template( 'tpl-categories.php' ) || is_search() || is_404() || is_tax( APP_TAX_CAT ) || is_tax( APP_TAX_TAG ) || is_singular( APP_POST_TYPE ) ) :

$args = cp_get_dropdown_categories_search_args( 'bar' ); ?>

Robin Robin
27 июл. 2020 г. 18:15:51

Вам следует добавить ваш код в ответ, а не в комментарий

mozboz mozboz
27 июл. 2020 г. 18:26:58
2
-2

Используйте пустой массив вместо 'page.php' например: is_page_template(array(''));

1 февр. 2019 г. 15:14:22
Комментарии

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему?

fuxia fuxia
1 февр. 2019 г. 15:48:36

Вы также можете привести пример.

RiddleMeThis RiddleMeThis
1 февр. 2019 г. 16:06:13