Условный тег для проверки использования 'page.php'?
Я пытаюсь проверить, используется ли шаблон 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 "успех!";
}
Но это не работает, когда я открываю страницу, использующую "Шаблон по умолчанию".
Я сам столкнулся с такой же проблемой, и моим решением стал этот код:
if(basename(get_page_template()) === 'page.php'){
}
basename(get_page_template()) получает имя файла шаблона страницы (согласно https://codex.wordpress.org/Function_Reference/get_page_template), а затем мы проверяем, равно ли оно 'page.php'
Не могли бы вы подробнее объяснить, как будет работать этот код?
Ethan Rævan
По крайней мере у меня это возвращает true для любой страницы, даже если используется пользовательский шаблон (отличный от page.php)
Jabel Márquez
Это потрясающе, потому что работает даже если страница использует свой шаблон по умолчанию.
rinogo
У вас есть две полезные функции: is_page() и is_page_template().
Функция is_page() возвращает true, если вы находитесь на странице, а функция is_page_template() возвращает false, если текущая запись (может быть страницей) не использует пользовательский шаблон.
Таким образом, вам просто нужно использовать обе эти функции вместе:
if ( is_page() && !is_page_template() ) {
// ваш код
}
Старый вопрос, но интересный.
В целом, в WordPress не принято проверять шаблон. Шаблон — это результат выполнения основного запроса и настройки контекста запроса.
При необходимости я бы, вероятно, установил какой-нибудь флаг в начале page.php, например, объявил константу, чтобы иметь собственный контекст для этого.
Однако в целом это заставляет задуматься, что любую логику, требующую такого подхода, стоит пересмотреть в соответствии с более стандартными механизмами и условными конструкциями.
+1 Любой код, требующий этого условия, вероятно, может быть просто безусловно размещен в page.php
Andy Macaulay-Brook
Это работает для меня в файле 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' );
Полный код
<?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