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?


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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.