İs_page_template () neyle karşılaştırılır?


10

İçinden bakıldığında Wordpress belgelerinde , bu diyor is_page_template()biri sağlandığı takdirde, bir "şablon adının" karşı karşılaştırır.

page-homepage.phpAranan bir şablon var Homepage:

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

Ve ben bu şablonu kullanırken benim fonksiyonlar.php çalıştırmak istediğiniz bazı kod var:

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

Ancak bu şablonu kullanan bir sayfada olduğumda tetiklenmiyor.

Wordpress'in yürüttüğü koda baktığımda is_page_template(), şablon adını değil, belge adını kontrol ediyor gibi görünüyor ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

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

Benim durumda görülüyor ki $page_templateolduğunu page-homepage.php... değil Şablon adı, dokümantasyon anlaşılacağı gibi -?

Yanlış bir şey mi yapıyorum?


Belgelere ilişkin iyi gözlem.
birgire

Yanıtlar:


15

Durumunuz şu şekilde yazılmalıdır:

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

Bu karışıklığın iki şeyin sonucu olduğuna inanıyorum:

  1. Dokümanlar belirsiz bir şekilde "ad" a atıfta bulunur. "Dosya adı" belirtilmesi dokümantasyonu çok daha net hale getirir.
  2. Arkasındaki kodu is_page_template()gösterir get_page_template_slug()özünde işlevi. Bu işlev aslında şablon bilgi dosyasına değil, bir dosya adı döndürür. https://codex.wordpress.org/Function_Reference/get_page_template_slug

is_page_template()İşlev için bir bağımsız değişken belirtirken (yukarıdaki örnekte olduğu gibi), dosya yolu tema köküne göredir.

Bu işlev döngü içinde çalışmaz.


2
Burada yolun ne anlama geldiğini açıklamak güzel olurdu .
birgire

1
Bunun neden kafa karıştırıcı olabileceğine dair ek açıklama ve ayrıntılar eklendi.
jdm2112

3
Vay. Çifte karışıklık. Belgelerin biraz belirsiz olduğunu anlayabiliyorum (gerçekten düzeltilmesi gerekmesine rağmen), ama get_page_template_slug()aslında bir sümüklü böcek döndürmediğine gerçekten şaşırdım !
Django Reinhardt

Kabul. Kod yazarken "bir şeyleri adlandırmak" en zor şeylerden biri olduğu fikrine daha fazla destek vermek.
jdm2112

Bu cevap "en iyi uygulama" çözümünü içermektedir. Ancak, sayfanız "varsayılan şablon" kullanıyorsa (ancak aslında bir Sayfa Şablonu ise), bu yanıt ilginizi çekebilir.
rinogo

7

Söylemek en iyi şey olduğunu düşünüyorum, DOSYA adını kontrol eder ve sizin durumunuzda page-homepage.php olacaktır. yani:

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

Düşünülmesi gereken diğer şeyler, şablon dosyasının aslında temanın içindeki başka bir klasörde depolanmasıdır. daha fazla oku

Bir şey daha, Template Name: Homepagebir sayfa veya yazı oluştururken şablonu tanımlamak için genellikle kullanılan şeydir .


Başka bir yanıtın belirttiği gibi - bu da dikkate alınır. page-templates/page-homepage.php, tema kökündeki şablondan farklı.
Howdy_McGee

İlginç ve bilmediğim bir şey, sadece onaylamak için, sayfa şablonlarını tema veya alt tema klasörü dışında saklayabilir miyim?
Malisa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.