Co porównuje is_page_template ()?

10

Przeglądając dokumentację Wordpress , is_page_template()porównuje się ją z „nazwą szablonu”, jeśli taka jest podana.

Mam szablon przechowywany w page-homepage.phpnazwie Homepage:

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

Mam kod, który chciałbym uruchomić w swoich funkcjach. Php, gdy korzystam z tego szablonu:

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

Ale to nie jest uruchamiane, gdy jestem na stronie, która używa tego szablonu.

Kiedy patrzę na kod, który wykonuje Wordpress is_page_template(), wygląda na to, że faktycznie sprawdza nazwę dokumentu, a nie nazwę szablonu ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

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

W moim przypadku wydaje się, że $page_templatejest page-homepage.php- nie nazwę szablonu, jak dokumentacja sugeruje ...?

czy robię coś źle?

Django Reinhardt
źródło
Dobra obserwacja dokumentacji.
birgire

Odpowiedzi:

15

Twój stan powinien być zapisany w następujący sposób:

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

Wierzę, że zamieszanie jest wynikiem dwóch rzeczy:

  1. Dokumenty odnoszą się do „nazwy” niejednoznacznie. Podanie „nazwy pliku” sprawiłoby, że dokumentacja byłaby bardziej przejrzysta.
  2. Kod z tyłu is_page_template()pokazuje get_page_template_slug()funkcję w jej rdzeniu. Ta funkcja w rzeczywistości zwraca nazwę pliku, a nie szablon ślimaka. https://codex.wordpress.org/Function_Reference/get_page_template_slug

Podczas określania argumentu dla is_page_template()funkcji (jak w powyższym przykładzie) ścieżka do pliku jest względna do katalogu głównego kompozycji.

Ta funkcja nie będzie działać w pętli.

jdm2112
źródło
2
Byłoby miło wyjaśnić, co oznacza tutaj ścieżka .
birgire
1
Dodano dodatkowe wyjaśnienia i szczegóły, dlaczego może to być mylące.
jdm2112,
3
Łał. Podwójny pomieszanie zamieszania. Rozumiem, że dokumenty są nieco niejednoznaczne (chociaż naprawdę należy to naprawić), ale jestem naprawdę zaskoczony, że get_page_template_slug()tak naprawdę nie zwraca ślimaka!
Django Reinhardt,
Zgoda. Udzielenie dalszego wsparcia dla pojęcia, że ​​„nazywanie rzeczy” jest jedną z najtrudniejszych rzeczy podczas pisania kodu.
jdm2112,
Ta odpowiedź zawiera rozwiązanie oparte na „najlepszych praktykach”. Jeśli jednak Twoja strona korzysta z „domyślnego szablonu” (ale w rzeczywistości jest to szablon strony), ta odpowiedź może Cię zainteresować.
rinogo,
7

Myślę, że najlepszą rzeczą do powiedzenia jest sprawdzenie nazwy PLIKU, a w twoim przypadku będzie to page-homepage.php. więc:

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

Inną rzeczą do przemyślenia jest to, czy plik szablonu jest faktycznie przechowywany w innym folderze w kompozycji. Czytaj więcej

Jeszcze jedna rzecz: Template Name: Homepageto, co jest używane do identyfikacji szablonu podczas tworzenia strony lub postu.

Malisa
źródło
Jak wskazuje inna odpowiedź - uwzględnia również ścieżkę. page-templates/page-homepage.phpróżni się od szablonu w katalogu głównym motywu.
Howdy_McGee
Ciekawe i coś, czego nie wiedziałem, tylko dla potwierdzenia, że ​​mogę przechowywać szablony stron poza motywem lub folderem motywu podrzędnego?
Malisa