С чем сравнивается is_page_template ()?


10

Просматривая документацию Wordpress , он говорит, что is_page_template()сравнивается с «именем шаблона», если оно есть.

У меня есть шаблон, хранящийся в page-homepage.phpпод названием Homepage:

/*
 * Template Name: Homepage
 * Description: The template for displaying the homepage
 */

И у меня есть код, который я хочу запустить в своем functions.php, когда я использую этот шаблон:

if (is_page_template('Homepage')) { 
   ...

Но это не срабатывает, когда я нахожусь на странице, которая использует этот шаблон.

Когда я смотрю на код, для которого выполняется Wordpress is_page_template(), похоже, что он на самом деле проверяет имя документа, а не имя шаблона ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

    if ( $template == $page_template )
        return true;

В моем случае кажется, что $page_templateэто page-homepage.php- не имя шаблона, как предполагает документация ...?

Я делаю что-то неправильно?


Хорошее наблюдение относительно документации.
— Birgire

Ответы:


15

Ваше состояние должно быть написано так:

if (is_page_template('path/file.php')) { 
    // Do stuff
}

Я считаю, что путаница является результатом двух вещей:

  1. Документы относятся к «имени» неоднозначно. Указание «имени файла» сделает документацию намного более понятной.
  2. Код позади is_page_template()показывает get_page_template_slug()функцию в ее ядре. Эта функция на самом деле возвращает имя файла, а не шаблонный слаг. https://codex.wordpress.org/Function_Reference/get_page_template_slug

При указании аргумента для is_page_template()функции (как в примере выше) путь к файлу указывается относительно корня темы.

Эта функция не будет работать внутри цикла.


2
Было бы хорошо иметь объяснение, что путь обозначает здесь.
— Birgire

1
Добавлены дополнительные разъяснения и подробности о том, почему это может сбивать с толку.
— jdm2112

3
Вау. Двойной смущение. Я могу понять, что документы немного неоднозначны (хотя это действительно должно быть исправлено), но я действительно удивлен, что на get_page_template_slug()самом деле не возвращает слизняк!
— Джанго Рейнхардт

Согласовано. Дальнейшая поддержка идеи о том, что «называть вещи» является одной из самых сложных вещей при написании кода.
— jdm2112

Этот ответ содержит решение «передовой опыт». Однако, если ваша страница использует «шаблон по умолчанию» (но на самом деле это шаблон страницы), этот ответ может вас заинтересовать.
— Риного

7

Я думаю, что лучше всего сказать, он проверяет имя ФАЙЛА, и в вашем случае это будет page-homepage.php. так:

if (is_page_template('page-homepage.php')) { 
  ...

Другие вещи, о которых стоит подумать, это если файл шаблона действительно хранится в другой папке внутри темы. прочитайте больше

Еще одна вещь, в Template Name: Homepageобщем, то, что используется для идентификации шаблона при создании страницы или публикации.


Как указывает другой ответ - он также принимает во внимание путь. page-templates/page-homepage.phpотличается от шаблона в корне темы.
— Howdy_McGee

Интересно и что-то я не знал, просто чтобы подтвердить, я могу хранить шаблоны страниц вне папки темы или дочерней темы?
— Малиса
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.