З чим порівнює is_page_template ()?


10

Переглядаючи документацію Wordpress , вона говорить про те, що is_page_template()порівнюється з "іменем шаблону", якщо така надається.

У мене зберігається шаблон у page-homepage.phpвиклику Homepage:

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

І у мене є якийсь код, який я хочу запустити в своїх функціях.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

Ця відповідь містить рішення "кращої практики". Однак якщо на вашій сторінці використовується "шаблон за замовчуванням" (але це насправді шаблон сторінки), ця відповідь може вас зацікавити.
— rinogo

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.