Ich möchte einen Filter auf alles anwenden.
add_filter (‘the_content’, word_swap);
- WP action / filter um Titel vor Kopfzeilenausgabe und Artikelausgabe zu ändern?
- Wie füge ich mehr als eine benutzerdefinierte Metadaten als Filter auf der Post-Liste-Seite hinzu?
- Freigegebener Upload-Ordner in WordPress-Multisite mit benutzerdefinierten Sub-Site-Domain-Bildern URL: s
- Fügen Sie andere Menüs als Untermenüs eines Hauptmenüs ein
- Posts durch Meta ausschließen und auch Posts ohne das Meta halten
- Gravity Forms Feldeinträge in wp_query loop
Gibt es einen Begriff, den ich ersetzen kann, der the_content
alle functionen the_content
?
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