it-swarm.com.de

Probleme beim Verstehen von apply_filters ()

In apply_filters ()

apply_filters( $tag, $value, $var ... );

Ich habe Probleme, den Kopf um den $value und den $var zu wickeln. Ich habe den Codex gelesen und es hört sich so an, als ob der $value geändert werden kann, $var nicht, aber ich habe keine Beispiele dafür in freier Wildbahn gefunden. Es scheint als eine Möglichkeit verwendet zu werden, eine Variable zu übergeben. In welchem ​​Fall ist der Unterschied zum $var?

19
r00tAcc3ss

Versuchen Sie, die Funktion mit besseren Namen zu sehen:

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

Also, wenn diese Funktion aufgerufen wird als:

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

Sie können verwenden ...

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

... und zwei Variablen an diese Funktion übergeben bekommen. Sie geben die erste zurück, die zweite liefert nur mehr Kontext:

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

Die zusätzlichen Variablen dienen dazu, Ihre Entscheidungen zu vereinfachen und nicht zu ändern.

34
fuxia

Was sind Filter?

Filter sind Funktionen, die WordPress zu bestimmten Zeitpunkten der Ausführung durchläuft, bevor mit den Daten eine Aktion ausgeführt wird (z. B. Hinzufügen zur Datenbank oder Senden an den Browser-Bildschirm). Filter befinden sich zwischen der Datenbank und dem Browser (wenn WordPress Seiten generiert) und zwischen dem Browser und der Datenbank (wenn WordPress der Datenbank neue Beiträge und Kommentare hinzufügt). Die meiste Eingabe und Ausgabe in WordPress durchläuft mindestens einen Filter. WordPress filtert standardmäßig etwas, und Ihr Plugin kann seine eigene Filterung hinzufügen.

Einhaken in einen Filter

Damit Benutzer bestimmte Daten (einen Wert, die Ausgabe einer Funktion usw.) ändern können, werden Filter-Hooks über apply_filters-Funktionen bereitgestellt.
Diese Filter-Hooks enthalten den Namen (oder Tag) des Filters und mindestens den Funktionsnamen, der für Filter verwendet werden soll (dh in irgendeiner Weise geändert werden soll) ) die Daten.

Um den Titel eines Posts zu ändern, können Sie den the_title Filter-Hook verwenden, der wie folgt definiert ist:

apply_filters( 'the_title', $title, $id );

Das heißt, der Filter hat den Tag/Namen the_title, der erste Parameter $title sind die zu ändernden Daten (d. H. Der Posttitel) und der zweite Parameter $id sind Zusatzinformationen (in diesem Fall die Post-ID).

Um beispielsweise den Titel jedes Posts in GROSSBUCHSTABEN anzuzeigen, können Sie die folgende Zeile verwenden:

add_filter('the_title', 'strtoupper');

Wenn wir uns die Funktion add_filter ansehen, sehen wir, dass sie wie folgt definiert ist:

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

Wir haben nur den ersten und den zweiten (erforderlichen) Parameter angegeben, während der dritte und der vierte Parameter auf den jeweiligen Standardwert (d. H. 10 und 1) eingestellt sind.

Ein komplexerer Filter

Wenn Sie nur einen bestimmten Beitrag filtern möchten , können Sie die zusätzlichen Informationen verwenden (im Falle dieses Filters: die ID). Dazu müssen Sie die Anzahl der Parameter angeben (in diesem Fall 2), und um dies erneut zu tun, müssen Sie den Prioritätsparameter angeben (der vor der Anzahl der Argumente steht).

Angenommen, wir möchten nur den Titel des Beitrags mit der ID 42 beeinflussen, dann sieht es so aus:

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

In diesem Fall müssen alle vier verfügbaren Parameter angegeben werden.

Welche Parameter habe ich?

Um die (Anzahl) verfügbaren Parameter eines bestimmten Filters zu identifizieren, müssen Sie nachsehen, wo dieser definiert ist (in diesem Fall: hier ).


Referenzen :

10
tfrommen