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

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

Kommentare

Antwort

Einige sehr gute einführende Antworten hier.

Grundsätzlich können Sie mit get_template_part() Theme-Entwicklern eine Reihenfolge der Spezifität von Vorlagendateien festlegen Spezifität, wie sie für CSS-Selektoren gilt. 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.

So zum Beispiel Sie gestalten ein Blog neu und erstellen eine -Schleife .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 get_template_part( "loop", "single" ); Auf Archivseiten rufen Sie get_template_part( "loop", "archive" ); auf und so weiter. Dies macht es später sehr einfach, wenn Sie die Schleife auf Ihren Archivseiten anders als auf der Startseite markieren: Erstellen Sie einfach eine loop-archive.php wird anstelle der generischen loop.php verwendet.

Aber die Magie hinter get_template_part() liegt in der Funktion locate_template(), die zuerst das Themenverzeichnis und dann das übergeordnete Verzeichnis überprüft (wenn eine existiert) für die Datei mit dem Namen. Dies ist sehr nützlich für die Plugin-Entwicklung. In einem meiner Plugins definiere ich einen benutzerdefinierten Beitragstyp und erstelle eine Schleifenvorlagendatei für diesen benutzerdefinierten Beitragstyp in meinem Plugin-Verzeichnis. Aber … ich möchte Damit Themen, die mein Plugin verwenden, mein Markup überschreiben können, wenn sie dies wünschen. Hier wirkt locate_template() wirklich Wunder.

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

sucht nach jedem der Namen im Array $ template_names im Stylesheet-Verzeichnis und dann im temporären Verzeichnis spätes Verzeichnis. 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. So kann ich in meinem Plugin so etwas machen:

if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" ); 

… was es Theme-Entwicklern hoffentlich sehr einfach machen sollte, mein Plugin durch einfaches Einfügen anzupassen eine Datei mit dem Namen loop-mycustomposttype.php in ihrem Thema.

Kommentare

  • Ersetzen Sie locate_template bitte durch dieses. include(locate_template( 'loop-mycustomposttype.php')) Auf diese Weise können Variablen übergeben werden. Ich ' habe dies hier gefunden Link . ' ist äußerst nützlich!
  • Wenn Sie dies tun, wird ' erforderlich sein, um dies zu ändern, wenn auch. So if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • Oh, guter Punkt. Mit der von mir angegebenen Formel befindet sich der Aufruf require oder require_once (von locate_template) eine Funktion und ' hat keinen Zugriff auf den aktuellen Bereich.

Antwort

Nicht alle Schleifen, die Hauptschleife. 😉 Egal, ob Sie sich Ihre Startseite oder eine Kategorie ansehen oder was Sie wissen, Sie haben immer eine Hauptschleife. Der Inhalt dieser Hauptschleife wird durch die Abfrage bestimmt, die vor ausgeführt wurde Ihre Vorlage wurde überhaupt aufgerufen.

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

Wenn Sie sich die loop.php von Twenty-Ten ansehen, können Sie diese Twenty-Ten sehen Diversifiziert dann innerhalb dieser einzelnen Vorlagendatei.

get_template_part() lädt lediglich ein Vorlagenteil und führt es durch. Sie können es auch extrahieren Teile Ihrer loop.php in separate Dateien und ersetzen Sie sie durch eine get_template_part("loop", "category") und so weiter Aufrufe.

Oder Sie könnten eine Teilvorlage für jeden einzelnen Beitrag haben in der Schleife und lassen Sie Ihre loop.php nur get_template_part("loop","post"); innerhalb der while... -Klausel aufrufen. Alles liegt bei Ihnen.

Antwort

Aus dem get_template_part-Codex :

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

führt eine PHP-Anforderung () für die erste vorhandene Datei aus …

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

Update : Es gibt einen kleinen Unterschied zu „require“ – es ist also in eine Funktion eingeschlossen Sie müssen global, wenn Sie Variablen aus Ihrer Vorlage an Ihren Vorlagenteil übergeben möchten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.