Apa yang dibandingkan dengan is_page_template ()?

10

Melihat melalui dokumentasi Wordpress , dikatakan is_page_template()membandingkan dengan "nama templat", jika ada.

Saya memiliki templat tersimpan di yang page-homepage.phpdisebut Homepage:

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

Dan saya memiliki beberapa kode yang ingin saya jalankan di functions.php saya ketika saya menggunakan template itu:

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

Tapi itu tidak dipicu ketika saya berada di halaman yang menggunakan template itu.

Ketika saya melihat kode yang dieksekusi Wordpress is_page_template(), sepertinya itu benar-benar memeriksa nama dokumen, bukan nama templat ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

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

Dalam contoh saya tampaknya $page_templateadalah page-homepage.php- bukan nama template, seperti dokumentasi menyarankan ...?

Apakah saya melakukan sesuatu yang salah?

Django Reinhardt
sumber
Pengamatan yang baik tentang dokumentasi.
birgire

Jawaban:

15

Kondisi Anda harus ditulis seperti ini:

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

Saya percaya kebingungan adalah hasil dari dua hal:

  1. Dokumen merujuk ke "nama" secara ambigu. Menentukan "nama file" akan membuat dokumentasi lebih jelas.
  2. Kode di belakang is_page_template()menunjukkan get_page_template_slug()fungsi pada intinya. Fungsi ini sebenarnya mengembalikan nama file, bukan template slug. https://codex.wordpress.org/Function_Reference/get_page_template_slug

Saat menentukan argumen untuk is_page_template()fungsi (seperti pada contoh di atas), path file relatif terhadap root tema.

Fungsi ini tidak akan berfungsi di dalam loop.

jdm2112
sumber
2
Akan menyenangkan untuk memiliki penjelasan apa jalan untuk di sini.
birgire
1
Menambahkan klarifikasi tambahan dan detail mengapa ini bisa membingungkan.
jdm2112
3
Wow. Sebuah kebingungan ganda. Saya dapat mengerti bahwa dokumennya agak ambigu (walaupun harus diperbaiki), tetapi saya benar-benar terkejut bahwa get_page_template_slug()sebenarnya tidak mengembalikan siput!
Django Reinhardt
Sepakat. Memberikan dukungan lebih lanjut pada gagasan bahwa "menamai sesuatu" adalah salah satu hal tersulit ketika menulis kode.
jdm2112
Jawaban ini berisi solusi "praktik terbaik". Namun, jika halaman Anda menggunakan "template default" (tetapi sebenarnya adalah Template Halaman), jawaban ini mungkin menarik bagi Anda.
rinogo
7

Saya pikir hal terbaik untuk dikatakan adalah, ia memeriksa nama FILE dan dalam kasus Anda itu akan menjadi page-homepage.php. begitu:

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

Hal-hal lain yang perlu dipikirkan adalah jika file template sebenarnya disimpan dalam folder lain di dalam tema. Baca lebih banyak

Satu hal lagi, Template Name: Homepagebiasanya apa yang digunakan untuk mengidentifikasi template ketika membuat halaman atau posting.

Malisa
sumber
Sebagai jawaban lain menunjukkan - itu juga mengambil jalan menuju pertimbangan. page-templates/page-homepage.phpberbeda dari templat di root tema.
Howdy_McGee
Menarik dan sesuatu yang saya tidak tahu, hanya untuk mengonfirmasi, saya dapat menyimpan template halaman di luar tema atau folder tema anak?
Malisa