get_template_part vs Action Hooks in Themes


15

Mir scheint, beide bieten dem Endbenutzer die Möglichkeit, ein Thema zu ändern, ohne die Themendateien tatsächlich zu bearbeiten (über untergeordnete Themen).

Meine Frage ist, ob eine Methode der anderen vorgezogen wird.

Nehmen wir zum Beispiel ein Thema, an dem ich gerade arbeite. Ich versuche zu entscheiden, ob ich mit Schablonenteilen von Haken arbeiten soll.

<?php get_template_part('before_sitecontainer' ); ?>
<div id="sitecontainer" class="sitecontainer" <?php //closed in footer ?>>

<?php get_template_part( 'before_topcontainer' ); ?>
<div id="topcontainer ">

    <?php get_template_part( 'before_topedge_navigation' ); ?>
    <?php get_template_part( 'topedge_navigation' ); ?>

    <?php get_template_part( 'before_site_header' ); ?>
    <?php get_template_part( 'site_header' ); ?>

    <?php get_template_part( 'before_second_navigation' ); ?>
    <?php get_template_part( 'second_navigation' ); ?>

    <?php get_template_part( 'after_second_navigation' ); ?>

</div><!-- end topcontainer div -->
<?php get_template_part( 'after_topcontainer' ); ?>

Mit dem obigen Befehl kann der Benutzer des Themas jeden Abschnitt des vorhandenen Codes ersetzen, indem er einfach eine Datei mit dem entsprechenden Namen in seinem untergeordneten Themenordner erstellt und neuen Code vor / nach jedem bereits vorhandenen Abschnitt nach derselben Methode hinzufügt - der Vorher / Nachher-Vorlage Teiledateien sind im übergeordneten Design überhaupt nicht vorhanden und dienen lediglich zum Einfügen von Code. Für diese Methode ist es nicht erforderlich, dass sie Hooks / Filter verstehen, um dies zu erreichen.

Das könnte ich natürlich auch mit Haken und Filtern erreichen.

Gibt es einen Vorteil bei der Verwendung von Hooks / Filtern? Wenn man bedenkt, dass das Zielpublikum, das dies verwenden wird, eindeutig kein Code- Kenner ist . Ich kann ihnen relativ grundlegende Anweisungen geben, die sie befolgen können, um die Template-Methode zu verwenden, aber sie werden mit ziemlicher Sicherheit den Teufel mit Haken verwechseln.

Oder gibt es Situationen, in denen einer im selben Thema besser wäre als der andere?

Antworten:


8

Ich bevorzuge Hooks, da sie flexibler sind: Sie können sie aus der functions.phpDatei Ihres Themas , aber auch aus Plugins einbinden. Ich versuche so viel Logik in Plugins zu stecken, dass die Themes hauptsächlich Layout-Inhalte enthalten.

Wenn Sie einen Aktions-Hook verwenden, ist es weiterhin möglich, get_template_part() diesen Hook-Handler zu verwenden . Dies gibt Ihnen das Beste aus beiden Welten. Sie könnten wahrscheinlich sogar einen Standard-Hook erstellen, der aufruft get_template_part(), sodass Personen, die nicht viel Erfahrung mit dem Codieren haben, zusätzliche Dateien hinzufügen können. Andere können diesen Hook entfernen, wenn sie dies nicht möchten.

In Bezug auf die Leistung: get_template_part()verwendet ( inlocate_template() ) file_exists()ein, zwei oder vier Mal (je nachdem, wie Sie es nennen). Es scheint file_exists()sehr schnell zu sein und verwendet Caching in PHP und vielleicht sogar im Betriebssystem. Das ist also wahrscheinlich kein Problem.


Das macht Sinn. Ein Teil meines Entwurfs war es, die Notwendigkeit von Plugins in den meisten Situationen, in denen sie häufig verwendet werden, zu beseitigen und gleichzeitig die Fähigkeit zu bewahren, sie für diejenigen zu verwenden, die dies möchten. Mein Zielkunde weiß sehr wenig über WordPress oder Plugins, ist nicht in der Lage, gute von schlechten Plugins zu unterscheiden (die Hauptschwäche von Plugins IMO) und möchte sich nicht mit dem Aktualisieren und Verwalten mehrerer Softwareteile befassen müssen. Ich muss also eine Menge Funktionen direkt in die Themes integrieren, um das zu liefern, was sie wollen: eine einfach zu verwendende, einfach zu wartende One-Stop-Lösung.
Ashley G

4

Ich würde sagen, dass der Hauptunterschied die Lesbarkeit ist. Wenn Sie mehrere gut benannte Vorlagenteile sehen, können Sie leicht nachvollziehen, was passiert. Wenn Sie nur einen Haken sehen, müssen Sie den Rest des Themas durchsuchen, um festzustellen, was mit dem Haken verbunden ist.


1
Ja, das macht Sinn und ist Teil dessen, was ich mit dem Beispielcode erreichen wollte.
Ashley G

4

Es ist (relativ) einfach, die Funktion aus dem untergeordneten Design zu entfernen, aber viel schwieriger, unerwünschte übergeordnete Vorlagen zu ignorieren.

Grundsätzlich ist das Arbeiten mit Hooks eher auf der PHP-Seite und das Arbeiten mit Templates eher auf der HTML-Seite. Ich verwende das Hybrid-Eltern-Thema, das sehr Hook-orientiert ist. Es ist ein Glücksfall, bis Sie die Vorlage eines Elternteils loswerden müssen.

Für Benutzer, die nicht technisch versiert sind, ist auch keine sehr gute Option. Warum sollten sie sich überhaupt mit solchen Themeneinbauten anlegen müssen?

PS beachten Sie auch Leistungsprobleme. Sachen mit Hooks passieren im Speicher, Sachen mit Templates brauchen viele Festplatten-Lookups. Vor allem, wenn Sie so etwas wie in Ihrem Beispiel schreiben.

PPS ist nicht jedermanns Vorliebe ... aber anstatt das übergeordnete Thema von Grund auf neu zu schreiben, warum nicht das vorhandene übergeordnete Thema übernehmen und dem Benutzer ein einfaches untergeordnetes Thema bereitstellen?


Das Ignorieren einer übergeordneten Vorlage ist so einfach wie das Erstellen einer leeren Vorlagendatei, um sie zu ersetzen. Viel einfacher als mit Hooks (und damit PHP) herumzuspielen für den technisch nicht versierten Benutzer. Obwohl für jemanden mit Erfahrung Haken wäre viel einfacher. Was den Grund angeht, gibt es immer diejenigen, die sich anpassen möchten, Sie haben sogar zugegeben, dass Sie dies tun. Warum ich ein Thema erstelle, ist die Richtung, in die ich mein Geschäft führen möchte. Das Bauen um ein anderes Geschäft scheint mir nicht sehr zukunftssicher zu sein, auch weil die meisten vorhandenen Themen von IMO zu wünschen übrig lassen. Ich denke, ich kann es besser machen.
Ashley G

Gute Punkte zu den Leistungsproblemen. Obwohl WordPress für die Arbeit mit get_template_part entwickelt wurde, hätte ich gedacht, dass es nicht so sehr ein Performance-Hit sein würde. Hat jemand Benchmarks dazu?
Ashley G

Ich verstehe, was Sie mit dem Ignorieren eines Vorlagenteils meinen. Nicht so einfach , wie ich dachte
Ashley G

Tatsächlich ist es so einfach wie das Platzieren einer leeren Vorlagendatei im untergeordneten Ordner, vorausgesetzt, sie befindet sich im Stammverzeichnis des Ordners. Schwierig wird es, wenn sich die Vorlagendateien in Unterordnern des übergeordneten / untergeordneten Themenordners befinden
Ashley G

Eigentlich sind auch Unterordner kein Problem. Ich hatte gerade den falschen Ordnernamen (ein sicheres Zeichen, dass ich zu spät arbeite, LOL). Zum Überschreiben eines Vorlagenteils ist nur eine Datei mit dem gleichen Namen im selben Pfad wie im übergeordneten
Ashley G
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.