it-swarm.com.de

Wie benutze ich get_template_part ()?

Könnte mir bitte jemand erklären, wie diese Funktion funktioniert? Ich weiß, was es macht, aber wenn ich mir den Quellcode in der Vorlage twenty_ten ansehe, verstehe ich nicht, wie alle Loops in einer einzigen loop.php gesammelt werden (ich habe diese Datei auch gesehen).

Wie kann man beispielsweise einen bestimmten gemeinsamen Teil einer Vorlage abstrahieren und dann für andere Vorlagen wiederverwenden?

25
Amit Erandole

Einige sehr gute einleitende Antworten hier.

Grundsätzlich können Theme-Entwickler mit get_template_part() 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 zum Beispiel 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 get_template_part( 'loop', 'index' ); auf, auf der einzelnen Vorlage rufen Sie get_template_part( 'loop', 'single' ); auf, auf Archivseiten rufen Sie get_template_part( 'loop', 'archive' ); auf 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 eine loop-archive.php -Vorlage und sie wird anstelle der generischenVorlage verwendet. - loop.php .

Die Magie hinter get_template_part() steckt jedoch in der Funktion locate_template(), die zuerst das Designverzeichnis 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 wirkt locate_template() wirklich Wunder.

locate_template($template_names, $load = false, $require_once = true )

sucht nach jedem Namen im Array $ template_names im Stylesheet-Verzeichnis und dann im Vorlagenverzeichnis. Wenn Sie 'true' als $ load-Argument übergeben, bedeutet dies, dass require die erste gefundene Datei 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 mit dem Namen loop-mycustomposttype.php in ihr Theme aufnehmen.

23
goldenapples

Nicht alle Schleifen, die Hauptschleife. ;-) Egal, ob du deine Startseite oder eine Kategorie ansiehst oder was auch immer, du hast immer eine Hauptschleife. Der Inhalt dieser Hauptschleife wird durch die Abfrage bestimmt, die ausgeführt wurde. before Ihre Vorlage wurde überhaupt aufgerufen.

Die loop.php-Vorlage durchläuft lediglich die Elemente in der Schleife und formatiert sie. Siehe die Dokumentation im Codex .

Wenn Sie sich Twenty-Ten loop.php ansehen, können Sie sehen, dass Twenty-Ten dann innerhalb diese einzelne Vorlagendatei diversifiziert.

get_template_part() lädt lediglich ein Template-Teil und durchläuft es. Genauso gut können Sie Teile Ihrer loop.php in separate Dateien extrahieren und durch eine get_template_part('loop', 'category') und so weiter ersetzen.

Oder Sie könnten eine Teilvorlage für jeden einzelnen Beitrag in der Schleife haben und Ihre loop.php nur get_template_part('loop','post'); innerhalb der while... -Klausel aufrufen lassen. Hängt alles von dir ab.

5
wyrfel

Aus dem Codex get_template_part :

<?php get_template_part( 'loop', 'index' ); ?>

führt ein PHP require () für die erste Datei aus, die existiert ...

So effektiv wird es funktionieren, als ob Sie eine andere PHP-Datei benötigen würden.

Update : Es gibt einen kleinen Unterschied zu 'require' - Es ist in eine Funktion eingeschlossen, daher müssen Sie global angeben, wenn Sie Variablen aus Ihrer Vorlage an Ihren Vorlagenteil übergeben möchten.

3
icc97