Wie man einen Filter auf alles anwendet?

Ich möchte einen Filter auf alles anwenden.

add_filter (‘the_content’, word_swap);

Gibt es einen Begriff, den ich ersetzen kann, der the_content alle functionen the_content ?

Solutions Collecting From Web of "Wie man einen Filter auf alles anwendet?"

Es gibt keine function “Alles filtern”.

WordPress macht etwas mit ihrer function capital_P_dangit() , die an ‘the_title’, ‘the_content’ und ‘comment_text’ hängt. https://developer.wordpress.org/reference/functions/capital_p_dangit/

Schauen Sie sich hier die Lösung von kfriend an … es funktioniert. Ich bin mir nicht sicher, ob es andere Risiken birgt, aber es funktioniert.

https://stackoverflow.com/questions/772510/wordpress-filter-to-modify-final-html-output

Sie können so ziemlich alles durch etwas anderes ersetzen.

Es gibt einen vordefinierten Filter namens “all”, den Sie verwenden können wie add_filter('all', 'word_swap');

Die function word_swap Sie als Callback übergeben, akzeptiert das Filter-Tag ( word_swap ) als erstes Argument, und das zweite Argument ist der Wert. Das Argument Wert kann für einige Filter wie “shutdown” übersprungen werden, daher muss es einen Standardwert enthalten.

 function word_swap($tag, $value = null){ // change value the way you want here return $changed_value; } 

word_swap 1: Um zu verhindern, dass Ihre function word_swap für einige Filter-Tags ausgeführt wird, können Sie ein Array von Tags für den Ausschluss halten.

 function get_tags_to_exclude(){ return ['some_filter_to_exclude_1', 'some_filter_to_exclude_2']; } function word_swap($tag, $value = null){ if( in_array( $tag, get_tags_to_exclude() ) ){ return $value; } // do whatever you want here return changed_value; } 

word_swap 2: Damit Ihre function word_swap nur für einige Filtertags ausgeführt werden kann, können Sie ein Array von Tags halten, die Sie zulassen.

 function get_tags_to_allow(){ return ['some_filter_to_allow_1', 'some_filter_to_allow_2']; } function word_swap($tag, $value = null){ if( !in_array( $tag, get_tags_to_allow() ) ){ return $value; } // do whatever you want here return changed_value; } 

add_filter Sie möchten, dass Ihr Filter nur für wenige Fälle aufgerufen wird, verwenden Sie besser add_filter

 add_filter('tag1', 'word_swap'); add_filter('tag2', 'word_swap'); 

Das Beispiel 2 ist also ein Beispiel für eine schlechte Verwendung, wenn Ihr zulässiges Filterarray nicht fast alle Filter enthält.

Aber wenn Sie wirklich wollen, dass Ihr Filter für fast alle Fälle aufgerufen wird (vielleicht einige von ihnen ausschließt), oder wenn Sie etwas in der Entwicklungsphase machen wollen, wie die Filterausführung zu verfolgen, dann ist es in Ordnung.

Der Filter “all” wird immer vor dem Filter selbst ausgeführt, also wenn es einen solchen Code gibt

 add_filter('all', 'word_swap'); add_filter('some_filter', 'other_function'); 

Ihre function word_swap wird immer vor der other_function . Sie können add_filter sogar in Ihrer function word_swap .

 function get_tags_to_exclude(){ return ['some_filter_to_exclude_1', 'some_filter_to_exclude_2']; } function word_swap_wrapper($tag, $value = null){ add_filter($tag, 'word_swap'); return $value; } add_filter('all', 'word_swap_wrapper'); function word_swap($value = null){ if( in_array( $tag, get_tags_to_exclude() ) ){ return $value; } // do whatever you want here return changed_value; } 

Ich schätze, du willst es nicht, wenn du alles komplett filtern willst. word_swap Sie möchten, dass Ihre function word_swap funktioniert, nachdem alle anderen Callbacks ausgeführt wurden, können Sie die folgende Priorität verwenden:

 function get_tags_to_exclude(){ return ['some_filter_to_exclude_1', 'some_filter_to_exclude_2']; } function word_swap_wrapper($tag, $value = null){ add_filter($tag, 'word_swap', PHP_INT_MAX); return $value; } add_filter('all', 'word_swap_wrapper'); function word_swap($value = null){ if( in_array( $tag, get_tags_to_exclude() ) ){ return $value; } // do whatever you want here return changed_value; } 

Ich kenne keinen besseren Weg, einen Callback zu registrieren, um den letzten ausgeführt zu werden, also repariere mich bitte irgendjemanden.

Lassen Sie uns einen Blick auf die function word_swap_wrapper , die word_swap function wird für jedes Tag für jedes Tag registriert, um zu beschränken, dass wir es überprüfen können, bevor wir das word_swap für dasselbe Tag immer wieder registrieren. Die endgültige Lösung wird also sein:

 function get_tags_to_exclude(){ return ['some_filter_to_exclude_1', 'some_filter_to_exclude_2']; } function word_swap_wrapper($tag, $value = null){ static $lookup; if(!$lookup){ $lookup = []; } elseif( !isset($lookup[ $tag ]) ){ $lookup[ $tag ] = true; add_filter($tag, 'word_swap', PHP_INT_MAX); } return $value; } add_filter('all', 'word_swap_wrapper'); function word_swap($value = null){ if( in_array( $tag, get_tags_to_exclude() ) ){ return $value; } // do whatever you want here return changed_value; } 

Eine unvollständige Liste der vordefinierten WP-Filter finden Sie hier und hier