Unterschied zwischen add_filter und apply_filters

17

Ich habe nach einer geeigneten Erklärung für den Unterschied zwischen add_filter()und apply_filters()hier gesucht , aber keine gefunden.

Kann mir jemand sagen, welche Informationen oder Logik vor der Verwendung add_filteroder apply_filtersin einem Kontext zu berücksichtigen sind .

Das macht den Gebrauch eines Imperativs und nicht des anderen?

  • Ist es richtig, dass add_filternur eine Funktion zur Warteschlange der Funktionen hinzugefügt wird, die darauf warten, für eine Variable ausgeführt zu werden, und apply_filtersdie Funktionen in der angegebenen Reihenfolge ausgeführt werden?

  • Ist es auch richtig, dass apply_filtersbeim Aufruf mit einem Argument (dem Namen der auszuführenden Funktion) diese Funktion vor allen anderen Funktionen (sofern vorhanden) in der Warteschlange ausgeführt wird?

Hanachi
quelle
2
Was ist mit der vorhandenen Dokumentation hier und hier , die es Ihnen nicht angemessen erklärt?
30.
3
Ich denke das ist eigentlich eine gute Frage. Als neuer WordPress-Entwickler kann dies ein verwirrendes Konzept sein.
Shawn

Antworten:

26

Die meisten der folgenden Informationen sind im Codex enthalten :


apply_filters

Die Rückruffunktionen, die an den Filter-Hook angehängt $tagsind, werden durch Aufrufen dieser Funktion aufgerufen. Mit dieser Funktion können Sie einen neuen Filter-Hook erstellen, indem Sie diese Funktion einfach mit dem Namen des neuen Hooks aufrufen, der mit dem Parameter $ tag angegeben wurde.

$value = apply_filters( $tag, $value, $var_1, $var_2, ... );

Im Wesentlichen:
Sie verwenden filtern eine bestimmte - in Bezug auf den Wert selbst sowie gegebenenfalls vorgesehenen Variablen durch . apply_filters$value$var_1$var_n


add_filter

Verknüpfen Sie eine Funktion mit einer bestimmten Filteraktion.

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Im Wesentlichen:
Sie verwenden add_filterdiese Option, um eine benutzerdefinierte Funktion mit der angegebenen Filteraktion ( $tag) zu verknüpfen , die Sie möglicherweise zuvor generiert apply_filtershaben (oder es handelte sich um eine integrierte Filteraktion oder stammt von einem Plugin / Ihrem Thema).


Also, hier ist eine Fiktion Beispiel:

function print_initials( $name ) {

    if ( ! is_string( $name ) ) {
        return;
    }

    $fragments = explode( ' ', $name );

    /**
     * Filter wether to print initials in reverse order.
     *
     * @param bool $reverse Print initials in reverse order?
     */
    if ( apply_filters( 'reverse_initials', FALSE ) ) {
        $fragments = array_reverse( $fragments );
    }

    foreach ( $fragments as $f ) {
        echo substr( $f, 0, 1 );
    }
}

print_initials( 'Some Guy' ); // outputs: SG

add_filter( 'reverse_initials', '__return_true' );

print_initials( 'Some Guy' ); // outputs: GS

Wenn wir unsere Funktion jetzt einfach so aufrufen, wie sie ist, werden die Initialen von links nach rechts gedruckt, da wir dies als Standardverhalten definiert haben.

Beim zweiten Mal werden die Initialen in umgekehrter Reihenfolge abgerufen, da die Filterfunktion __return_true, die mit unserer Filteraktion verknüpft ist, immer zurückgegeben wird TRUEund die Initialen daher von rechts nach links ausgegeben werden.

tfrommen
quelle
3
Dies ist eine großartige Antwort und zeigt, wie Sie Filter überschreiben können. Vielen Dank.
Shawn