İ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.