Einige sehr gute einleitende Antworten hier.
Grundsätzlich get_template_part()
können Theme-Entwickler eine Reihenfolge für die Spezifität von Vorlagendateien festlegen. Betrachten Sie es ähnlich wie die Spezifität von CSS-Selektoren. Wenn Sie etwas entwerfen, möchten Sie mit einem Minimum an Spezifität beginnen, damit es in Teilen eines Designs, die individuelle Aufmerksamkeit erfordern, leicht überschrieben werden kann.
Sie gestalten beispielsweise ein Blog und erstellen eine loop.php- Datei, die sich gut zum Markieren von Posts eignet . Sie planen jedoch im Voraus und rufen es später in Ihren Vorlagendateien mit zusätzlichen Kontextspezifizierern auf. Auf der Indexseite rufen Sie beispielsweise auf get_template_part( 'loop', 'index' );
, auf der einzelnen Vorlage rufen Sie auf get_template_part( 'loop', 'single' );
, auf Archivseiten rufen Sie auf get_template_part( 'loop', 'archive' );
und so weiter. Dies macht es sehr einfach, wenn Sie sich entscheiden, die Schleife auf Ihren Archivseiten anders als auf der Startseite zu markieren: Erstellen Sie einfach ein loop-archive.php- Template und es wird anstelle der generischen loop.php verwendet .
Die Magie dahinter steckt get_template_part()
jedoch in der Funktion locate_template()
, die zuerst das Themenverzeichnis und dann das übergeordnete Verzeichnis (falls vorhanden) für die genannte Datei überprüft. Dies ist sehr nützlich für die Plugin-Entwicklung. In einem meiner Plugins definiere ich einen benutzerdefinierten Beitragstyp und erstelle eine Loop-Vorlagendatei für diesen benutzerdefinierten Beitragstyp in meinem Plugin-Verzeichnis. Aber ... ich möchte zulassen, dass Themen, die mein Plugin verwenden, mein Markup überschreiben, wenn sie dies wünschen. Hier wirken sich locate_template()
wirklich Wunder aus.
locate_template($template_names, $load = false, $require_once = true )
sucht nach jedem Namen im Array $ template_names im Stylesheet-Verzeichnis und dann im Vorlagenverzeichnis. Die Übergabe von 'true' als $ load-Argument bedeutet, dass die erste gefundene Datei erforderlich ist und eine leere Zeichenfolge zurückgegeben wird, wenn keine Vorlagendatei gefunden wurde. Also kann ich so etwas in meinem Plugin machen:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
include( 'loop-mycustomposttype.php' );
... was es den Theme-Entwicklern hoffentlich sehr leicht machen sollte, mein Plugin anzupassen, indem sie eine Datei namens loop-mycustomposttype.php in ihr Theme aufnehmen.