Fügen Sie mit add_filter ein neues Element in das Array ein

8
add_filter('example_filter', function(){ return array( 'tax1' ); } );
add_filter('example_filter', function(){ return array( 'tax2' ); } );
add_filter('example_filter', function(){ return array( 'tax3' ); } );

print_r( apply_filters( 'example_filter', array()) );

Ergebnis ist

Array ( [0] => tax3 ) 

Ich konnte nicht herausfinden, wie ich mit add_filter ein neues Element in dieses Array einfügen kann. Was ist der richtige Weg?

Ünsal Korkmaz
quelle

Antworten:

12

Filter rufen jede der angeschlossenen Rückruffunktionen auf (in Prioritätsreihenfolge). Der zu filternde Wert wird an die erste Rückruffunktion übergeben. Der zurückgegebene Wert dieser Rückruffunktion wird dann an den zweiten Rückruf übergeben, und der zurückgegebene Wert von diesem wird an den dritten usw. zurückgegeben, bis alle verknüpften Rückrufe ausgelöst wurden. Was auch immer der zuletzt zurückgegebene Wert ist (dh der gefilterte Wert, der alle Rückrufe durchlaufen hat), wird dann als der Wert angesehen, nachdem der Filter angewendet wurde.

Im obigen Beispiel ignoriert jeder Filter, was an ihn übergeben wird, und gibt stattdessen nur sein eigenes neues Array zurück.

( Randnotiz: Vermeiden Sie anonyme Funktionen als Rückrufe)

Versuchen:

add_filter('example_filter', 'my_example_filter_1' );
function my_example_filter_1( $array ){
    $array[]='tax1';
    return $array;
}
add_filter('example_filter', 'my_example_filter_2' );
function my_example_filter_2( $array ){
    $array[]='tax2';
    return $array;
}
add_filter('example_filter', 'my_example_filter_3' );
function my_example_filter_3( $array ){
    $array[]='tax3';
    return $array;
}

print_r( apply_filters( 'example_filter', array()) );
Stephen Harris
quelle
Gibt es einen guten Grund, keine anonymen Funktionen für Filter zu verwenden, wenn Sie remove_filter nicht verwenden müssen und wenn Sie diese Funktion nicht erneut aufrufen müssen?
Ünsal Korkmaz
1
Nun, es ist eine gute Praxis, sie nicht zu verwenden, weil 1. die Lesbarkeit verbessert wurde. 2. Erweiterbarer Code. 3. Sie werden in PHP 5.2 nicht unterstützt. Die Verwendung anonymer Funktionen bietet keine Vorteile.
Stephen Harris