З чим порівнює 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.