Erläuterung zu Filtern und Haken

7

Ich bin im Begriff, mein erstes WordPress-Projekt zu starten, und ich habe die Aufgabe, angepassten Kerncode, der den Kern überschreibt, in separate Funktionen / Dateien zu verschieben (auf diese Weise ist die Wartung bei zukünftigen Upgrades einfacher.

Ich habe recherchiert und es sieht aus wie add_filterund apply_filterund do_actionund add_actionscheint der richtige Weg zu sein. Ich bin mir immer noch nicht sicher, wie sie funktionieren. Verwenden Sie diese Methoden, um Kernmethoden zu überschreiben? Ich bin verwirrt, weil ich add_filterdas Wort benutze, addwenn ich das Gefühl habe, dass es eher im Sinne von replaceoder ist overwrite(es sei denn, ich verstehe das falsch).

Ich habe gerade gelesen , die erste Antwort auf diese (die über die Tacos)

Der Autor hat also drei Schritte ausgeführt, um die Verwendung von add_filter zu beschreiben:

Schritt 1: Ein statischer Wert für die Variable $ taco

<?php $taco = 'chicken'; ?>

Schritt 2:

    <?php
    $taco = apply_filters( 'get_taco', 'chicken' );
    ?>

Schritt 3:

    <?php
    add_filter( 'get_taco', 'my_special_order' );
    function my_special_order( $content ) {
        return 'shredded beef';
    }
    ?>

In dieser Situation wird also apply_filternur eine dynamische Methode im laufenden Betrieb erstellt und die chickenZeichenfolge zurückgegeben? Oder wird hier davon ausgegangen, dass es eine Kernmethode von WordPress gibt get_tacound dass die Verwendung apply_filterdazu beitragen würde, die ursprüngliche Funktionalität zu überschreiben?

Kannst du auch nur apply_filteretwas, das du bearbeitet hast add_filter? Mit anderen Worten, würde es apply_filter('get_taco');nicht funktionieren, wenn ich add_filter('get_taco', 'my_special_order');UND nicht zuerst definieren würde function my_special_order ($content) ...?

Füge ich diese Filter in meine Datei functions.php ein? Es tut mir leid, dass ich Sie mit Fragen bombardiert habe. Ich komme von Ruby on Rails, daher bin ich in WordPress völlig ahnungslos.

Bigpotato
quelle

Antworten:

7

Ich bin verwirrt, weil add_filter das Wort add verwendet, wenn ich das Gefühl habe, dass es eher im Zusammenhang mit Ersetzen oder Überschreiben steht (es sei denn, ich habe ein Missverständnis).

Du missverstehst. Beide add_actionund add_filterFunktionsrückrufe in eine Art Warteschlange einfügen. Sie können demselben Hook viele Rückrufe hinzufügen, die in der hinzugefügten Reihenfolge ausgelöst werden, es sei denn, als dritter Parameter ist eine Priorität enthalten.

In dieser Situation erstellt der apply_filter also nur eine dynamische Methode im laufenden Betrieb und lässt sie den Chicken-String zurückgeben?

apply_filters - Beachten Sie das 's' - erstellt den Filter mehr oder weniger, aber normalerweise wird ihm eine Variable übergeben, keine Zeichenfolge, und diese Variable wird an den Rückruf übergeben, der sie dann ändert und zurückgibt.

Filter-Slugs sind in der Regel nicht die Namen von WordPress Core-Funktionen oder -Methoden, obwohl einige Funktionen Filter mit demselben Namen haben. Ruft beispielsweise the_content()den the_contentFilter auf.

Hooks überschreiben normalerweise nicht die gesamte Funktion, sondern nur Teile davon, aber es gibt Ausnahmen und nahezu Ausnahmen.

Können Sie auch nur etwas anwenden, das Sie hinzugefügt haben?

Nein, umgekehrt. Sie können nur add_filteretwas, das apply_filtered ist. Sie können verwenden, add_filter('whatever','abc');aber nichts wird passieren, wenn es nicht apply_filter('whatever',...irgendwo gibt.

Ähnliches gilt für add_action/, do_actionaber Aktionen dienen eher dazu, Dinge zu tun, als Werte zurückzugeben.

Hooks werden zu verschiedenen Zeitpunkten beim Laden der Seite und an verschiedenen Stellen in Funktionen und Methoden ausgeführt. Wird beispielsweise gegen save_postEnde von ausgeführt, wp_insert_postwährend am Ende pre_get_postsder get_postsMethode der WP_QueryKlasse ausgeführt wird. Andere werden in der Mitte des Seitenladens ausgeführt und überhaupt nicht in einer Funktion oder Methode. Sie werden ausgeführt, wo immer (wie von den Entwicklern festgelegt) Informationen geändert oder hinzugefügt oder andere Funktionen ausgeführt, eine Seite umgeleitet usw. werden müssen.

Mehr Informationen

Unterschied zwischen Filter- und Aktionshaken?

s_ha_dum
quelle
Wann genau werden diese Filter / Aktionen ausgeführt? Am Anfang / Mitte / Ende der Funktion? Kann ich das kontrollieren? Wenn ich "Hooks" hinzufüge, sage ich nur "Führen Sie diese Funktion aus, bevor die Funktion endet, aber nachdem der Code in der Funktion ausgeführt wurde"?
Bigpotato
@ Edmund: siehe die Bearbeitung
s_ha_dum
0

Ich denke, du hast es ein bisschen falsch verstanden.

Filter und Aktionen sind Funktionen, die Sie Hooks "zuweisen". An vielen Stellen ruft WordPress auf do_actionoder apply_filterfunktioniert. Der erste Parameter dieser Funktionen ist der Hook-Name.

So zum Beispiel, wenn Sie sehen

do_action('blabla');

Dies bedeutet, dass alle Aktionen, die dem 'blabla'-Hook zugewiesen sind, aufgerufen werden.

add_filterund add_actionüberschreibt nichts. Es macht genau das, was es sagt - es weist Ihre Funktion einem bestimmten Haken zu.

Ihr Schritt 2. wendet also Filter get_tacoauf statischen Wert an chicken. Und mit Filter anwenden meine ich, dass es alle Funktionen aufruft, die dem get_tacoHook zugewiesen sind .

Ihr Schritt 3. erstellt eine neue Funktion my_special_orderund weist sie dem get_tacoHook zu. Wenn also ein apply_filter('get_taco')Aufruf erfolgt, wird Ihre Funktion aufgerufen.

Wenn einem bestimmten Hook kein Filter / keine Aktion zugewiesen ist, wird nichts unternommen.

Weitere Informationen zu diesem Thema finden Sie hier: http://codex.wordpress.org/Plugin_API

Krzysiek Dróżdż
quelle