PHP-Code in Seitenvorlage vs Funktionen

8

Ich habe zahlreiche WordPress-Sites erstellt und PHP-Praktiken gelernt, die ich für richtig halte, dh Funktionen befinden sich in der Datei functions.php. Fast alles in functions.php sollte in eine Funktion eingeschlossen sein. Seitenvorlagen können direkt PHP enthalten , usw.

Aber ich bin ein bisschen wackelig beim "Warum". Was ändert an den Seitenvorlagen im Vergleich zur Funktionsdatei, was in den einzelnen Vorlagen funktioniert und was nicht? Ich gehe davon aus, dass es sich um die Ladereihenfolge handelt, aber jede erweiterte Anleitung / Richtung wäre willkommen.

Bearbeiten - Okay, ich verstehe den Aspekt "Best Practices". Funktionen sollen wiederverwendbar sein usw. Ich suche eher nach den technischen Gründen, wann / warum es nicht funktioniert.

tmdesigned
quelle
Ladereihenfolge, Wiederverwendbarkeit (wie würden Sie die Funktion aus der Vorlage wiederverwenden?) Und Code sauber halten (Vorlagen dienen der Anzeige, nicht den Funktionen)
Krzysiek Dróżdż
6
Schauen Sie sich das wp-Lastdiagramm in der Antwort auf op an: wordpress.stackexchange.com/questions/26537/… Vorlagen werden fast ausschließlich für die Präsentation verwendet, sodass sie zuletzt geladen werden, wenn die gesamte Anwendungslogik fertig ist. Ich weiß nicht, ob Sie von Model-View-Controller-Mustern gehört haben. Während WordPress die beiden anderen Ebenen nicht wirklich gut voneinander trennt, sind Vorlagen so ziemlich immer noch die Ansicht. Funktionen sollten die Anwendungslogik enthalten.
TurtleTread
Danke, das ist hilfreich. Wenn ich also in Bezug auf Hooks einen Hook wie do_action ('enqueue_lightbox_assets') in meine Vorlagendatei einfüge, wurden zu dem Zeitpunkt, an dem alle an diesen Hook angehängten Funktionen ausgeführt werden, bereits geladen und gespeichert und warten nur auf einen zukünftigen Auslöser. Recht?
tmdesigned
Seitenvorlagen werden nicht immer ausgeführt, während fucntion.php immer ausgeführt wird.
Qaisar Feroz
Mögliches Duplikat von Soll ich eine PHP-Funktion in home.php schreiben?
Leymannx

Antworten:

2

Obwohl es keine "offiziellen" Antworten gibt, ist diese Frage immer noch sehr beliebt, daher werde ich ein Jahr später meine festen Gedanken dazu veröffentlichen.

Was zu dieser Frage geführt hat, ist die Erfahrung, dass Code an einigen Stellen funktioniert und an anderen nicht. Warum musste ich beispielsweise Code in eine Funktion in functions.php einbinden, anstatt ihn nur lose dort abzulegen, während ich ihn in einer Vorlagendatei locker halten konnte? Es fühlte sich so an, als gäbe es einen grundlegenden Unterschied darin, wie WordPress den Code an verschiedenen Stellen behandelt.

Aber das stimmt natürlich nicht. PHP ist PHP, und WordPress tuckert nur fröhlich, Zeile für Zeile.

Der Hauptunterschied, wie ich in meiner ursprünglichen Frage schrieb und wie Krzysiek und andere bestätigten, ist die Ladereihenfolge. Aber die Ladereihenfolge in WordPress ist alles.

Die functions.php eines Themas wird relativ früh sehr früh geladen . Es befindet sich noch in einer Vorbereitungsphase. Die Schlüsselfunktionen von WordPress wie add_action () sowie Plugins und Globals sind bereit. Aber es ist noch nicht bereit für Sie, Dinge zu tun . Die Seitenausgabe wird noch nicht geschrieben, die Hauptschleife läuft nicht usw.

Wenn Sie also eine lose Codezeile einfügen, um "jetzt" in functions.php etwas zu tun, ist es wahrscheinlich zu früh. Stattdessen sollten die losen Codezeilen hier vorbereitender Natur sein, dh "Später ausführen" oder "Hier ist eine Konstante für später" oder, wie der Name der Datei andeutet, "Hier ist eine Funktion, die später ausgeführt werden soll".

Vorlagendateien werden dagegen relativ spät ausgeführt. WordPress ist beim Laden so weit fortgeschritten, dass es über genügend Informationen verfügt, um die richtige Vorlagendatei für die Benutzeranforderung auszuwählen. Fast jeder lose Code ist hier sinnvoll, da wir uns dem Ende des Zyklus nähern. Alles andere ist eingerichtet und wir bauen bereits unsere Ausgabe auf.

In diesem Sinne beginnen die Dinge in den Fokus zu rücken. Warum verursacht ein Syntaxfehler in functions.php einen weißen Todesbildschirm, aber ein Syntaxfehler in einer Vorlagendatei bricht die Seite nur zur Hälfte durch? Da functions.php vor jeder Ausgabe ausgeführt wird, bricht ein Fehler ab, bevor etwas angezeigt werden kann, aber eine Vorlagendatei könnte sich in der Mitte der Ausgabe befinden.

Es kommt also auf die Reihenfolge an, aber auf eine tiefere Art und Weise, als ich ursprünglich gedacht hatte.

ps Was mir im letzten Jahr geholfen hat, dies besser zu verstehen, sind (a) ein besseres Verständnis der Ladereihenfolge, die durch das Durchlaufen der Ladesequenz mit xDebug, das buchstäbliche Beobachten der Entwicklung der Dinge und (b) ein tieferes Verständnis der Haken erzielt wurde. Da die Ladereihenfolge in WordPress so wichtig ist, ist das Hooks-System von entscheidender Bedeutung. Es ist wie eine Zeitreise für Ihren Code.

tmdesigned
quelle