С чем сравнивается 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()функции (как в примере выше) путь к файлу указывается относительно корня темы.

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

jdm2112
источник
2
Было бы хорошо иметь объяснение, что путь обозначает здесь.
Birgire
1
Добавлены дополнительные разъяснения и подробности о том, почему это может сбивать с толку.
jdm2112
3
Вау. Двойной смущение. Я могу понять, что документы немного неоднозначны (хотя это действительно должно быть исправлено), но я действительно удивлен, что на get_page_template_slug()самом деле не возвращает слизняк!
Джанго Рейнхардт
Согласовано. Дальнейшая поддержка идеи о том, что «называть вещи» является одной из самых сложных вещей при написании кода.
jdm2112
Этот ответ содержит решение «передовой опыт». Однако, если ваша страница использует «шаблон по умолчанию» (но на самом деле это шаблон страницы), этот ответ может вас заинтересовать.
Риного
7

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

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

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

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

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