6 Stimmen

Muss ich add_filter() vor apply_filters() in Wordpress hinzufügen?

Ich versuche zu verstehen, wie Wordpress-Plugins funktionieren, wie:

apply_filters( 'gettext', $translations->translate( $text ), $text, $domain );

Ich suche nach allen Codes in Wordpress, aber ich kann nicht finden:

add_filter( 'gettext', ....);

Warum gibt es kein add_filter für dieses Plugin? Oder habe ich etwas übersehen? Gleiches gilt für:

do_action('wp_loaded');

Ich kann nicht finden:

add_action('wp_loaded', ....);

7voto

Dogbert Punkte 200597

apply_filters ist so etwas wie 'wenn es Filter mit diesem Namen gibt, führe die angehängten Callbacks mit diesen Parametern aus'. Wenn es also kein add_filter für diesen Namen gibt, bedeutet das, dass es keinen Filter gibt, der im Moment mit dem apply_filters Aufruf ausgeführt wird.

Dasselbe gilt für do_action und add_action.

1voto

Lam Le Punkte 1196

Ich bin auch ein Anfänger im PHP - WordPress-Stack, aber das ist mein Verständnis.

Das Aufrufen von apply_filters in den Plugins ohne add_filter in ihrem Code dient dazu, den Website-Benutzern zu ermöglichen, benutzerdefinierte Logik zu ihren Plugins hinzuzufügen. Wir - die Benutzer, können unsere eigene Funktion hinzufügen und add_filter verwenden, um unsere Funktionen zu registrieren.

Zum Beispiel stammt dieses Stück Code aus dem Plugin. Normalerweise zeigt es alle Produkte an, aber es bietet uns eine Möglichkeit, ein bestimmtes Produkt nicht anzuzeigen.

// Plugin's

if (apply_filters( 'plugin_show_products', true, $product->get_id() ) ) {
    $this->show_products();
}

Also, wenn wir - die Benutzer, etwas anpassen möchten, können wir unsere eigene Funktion wie folgt hinzufügen (vielleicht in functions.php)

// Unsere benutzerdefinierten Änderungen
function my_own_changes($boolean, $product_id) {
    if ( $product_id === 5 ) return false;
    return true;
}
add_filter( 'plugin_show_products', 'my_own_changes', 10, 2 );

Dies bedeutet: Das Plugin wird sich normal verhalten, aber für meine Website wird das Produkt mit der ID 5 nicht angezeigt!

0voto

NJENGAH Punkte 765

Ich bin auf diesen Code-Typ in einem Plugin oder Theme gestoßen, in dem apply_filter verwendet wird, ohne dass ein vorhandener filter oder add_filter vorhanden ist.

In diesem Fall, in dem apply_filters ohne Filter verwendet wird, müssen Sie die Funktion erneut aufrufen, wo Sie sie ausführen möchten. Zum Beispiel im Header eines Themes.

Im Folgenden finden Sie ein Beispiel für die Verwendung von Apply Filters in einer Funktion, die erneut in der header.php aufgerufen wird.

if ( ! function_exists( 'header_apply_filter_test' ) ) {

    function header_apply_filter_test() {

        $filter_this_content = "Beispielinhalt zum Filtern";

        ob_start();

            echo $filter_this_content; 

        $output = ob_get_clean();

        echo apply_filters( 'header_apply_filter_test', $output );//hier verwendet 
    }
}

Jetzt müssten Sie in der Datei header.php diese Funktion aufrufen, da sie nirgendwo angeschlossen ist. Also, in diesem Fall würden Sie die Funktion wie folgt aufrufen, um die Ausgabe im Header anzuzeigen:

Sie könnten diesen Code auch mit einem Hook schreiben und er würde dasselbe tun, d.h. die Ausgabe im Header anzeigen.

add_filter('wp_head', 'header_apply_filter_test');

if ( ! function_exists( 'header_apply_filter_test' ) ) {

        function header_apply_filter_test() {

            $filter_this_content = "Beispielinhalt zum Filtern";

            ob_start();

                echo $filter_this_content; 

            $output = ob_get_clean();

            echo $output; 
        }
    } 

Bei dieser zweiten Option hätten Sie immer noch die Möglichkeit, apply_filters an anderer Stelle zu verwenden, um die Rückruffunktion header_apply_filter_test() aufzurufen, da der Filter jetzt existiert.

Also ist meiner Ansicht nach der springende Punkt ein Anwendungsfall, da beide Ansätze funktionieren!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X