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.