Womit vergleicht sich is_page_template ()?


10

In der Wordpress-Dokumentation heißt es, dass dies is_page_template()mit einem "Vorlagennamen" verglichen wird, sofern einer angegeben ist.

Ich habe eine Vorlage in gespeichert page-homepage.phpgenannt Homepage:

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

Und ich habe einen Code, den ich in meiner functions.php ausführen möchte, wenn ich diese Vorlage verwende:

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

Es wird jedoch nicht ausgelöst, wenn ich mich auf einer Seite befinde, die diese Vorlage verwendet.

Wenn ich mir den Code ansehe, für den Wordpress ausgeführt wird is_page_template(), sieht es so aus, als würde tatsächlich nach dem Dokumentnamen gesucht, nicht nach dem Vorlagennamen ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

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

In meinem Fall scheint das $page_templateso zu sein page-homepage.php- nicht der Name der Vorlage, wie die Dokumentation vorschlägt ...?

Mache ich etwas falsch?


Gute Beobachtung bezüglich der Dokumentation.
Birgire

Antworten:


15

Ihr Zustand sollte so geschrieben sein:

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

Ich glaube, die Verwirrung ist das Ergebnis zweier Dinge:

  1. Die Dokumente beziehen sich mehrdeutig auf "Name". Die Angabe von "Dateiname" würde die Dokumentation viel klarer machen.
  2. Der Code dahinter is_page_template()zeigt die get_page_template_slug()Funktion im Kern. Diese Funktion gibt tatsächlich einen Dateinamen zurück, nicht den Vorlagen-Slug. https://codex.wordpress.org/Function_Reference/get_page_template_slug

Wenn Sie ein Argument für die is_page_template()Funktion angeben (wie im obigen Beispiel), ist der Dateipfad relativ zum Themenstamm.

Diese Funktion funktioniert nicht innerhalb der Schleife.


2
Es wäre schön, eine Erklärung zu haben, wofür der Weg hier steht.
Birgire

1
Zusätzliche Erläuterungen und Details hinzugefügt, warum dies verwirrend sein kann.
jdm2112

3
Beeindruckend. Ein Doppelschlag der Verwirrung. Ich kann verstehen, dass die Dokumente etwas mehrdeutig sind (obwohl sie eigentlich behoben werden sollten), aber ich bin wirklich überrascht, dass get_page_template_slug()sie keine Schnecke zurückgeben!
Django Reinhardt

Einverstanden. Weitere Unterstützung für die Vorstellung, dass das "Benennen von Dingen" eines der schwierigsten Dinge beim Schreiben von Code ist.
jdm2112

Diese Antwort enthält die "Best Practice" -Lösung. Wenn Ihre Seite jedoch die "Standardvorlage" verwendet (es handelt sich jedoch tatsächlich um eine Seitenvorlage), könnte Sie diese Antwort interessieren.
Rinogo

7

Ich denke, das Beste, was ich sagen kann, ist, dass der Dateiname überprüft wird und in Ihrem Fall page-homepage.php. so:

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

Andere Dinge, an die Sie denken sollten, sind, wenn die Vorlagendatei tatsächlich in einem anderen Ordner innerhalb des Themas gespeichert ist. Weiterlesen

Eine weitere Sache Template Name: Homepageist, was allgemein verwendet wird, um die Vorlage beim Erstellen einer Seite oder eines Beitrags zu identifizieren.


Wie eine andere Antwort hervorhebt, wird auch der Weg berücksichtigt. page-templates/page-homepage.phpunterscheidet sich von der Vorlage im Themenstamm.
Howdy_McGee

Interessant und etwas, das ich nicht wusste, nur um zu bestätigen, kann ich die Seitenvorlagen außerhalb des Themas oder des untergeordneten Theme-Ordners speichern?
Malisa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.