Ich filtere den Inhalt mit dem the_content
Filter. Alles funktioniert einwandfrei, auszugsweise werden meine Änderungen auch auf benutzerdefinierte Abfragen angewendet. Meine Änderungen werden auch in der Seitenleiste angezeigt, wenn das Widget eine benutzerdefinierte Abfrage verwendet
Um dem entgegenzuwirken, ziele ich nur is_main_query()
auf die Hauptabfrage ab, aber sie funktioniert nicht. Änderungen werden einfach noch auf alle Abfragen durchgespielt. Was aber lustig ist, alle anderen bedingten Überprüfungen mögen is_single()
und is_category()
funktionieren, wenn ich auf bestimmte Seiten ziele, mit der Ausnahme, dass sich alle Änderungen auf jede andere benutzerdefinierte Abfrage auf dieser Seite auswirken, unabhängig davon, ob ich sie verwende is_main_query()
oder nicht
Vermisse ich hier etwas? Wie wende ich meine Änderungen nur mit dem the_content
Filter auf die Hauptabfrage an?
add_filter('the_content', 'custom_content');
function custom_content($content){
if(is_main_query()){ // << THIS IS NOT WORKING
// My custom content that I add to the_content()
}
return $content;
}
quelle
is_main_query
, glaube wirklich, niemand hat dies gründlich getestet. Vielen Dank für Ihre Eingabe, sehr geschätztis_main_query
es nichts gab.Dies ist nur eine Ergänzung zu @ Ottos Antwort. Nur um es ein bisschen verständlicher zu machen. Grundsätzlich müssen Sie die Logik von @Otto umkehren. Das heißt: Wenn Sie die Hauptabfrage zuverlässig ermitteln können, können Sie Ihre Einbindung in den
the_content
Filter hinzufügen und entfernen .Beispielsweise kann die Hauptabfrage bei der
pre_get_posts
Aktion zuverlässig erkannt werden , so dass dies funktionieren würde:Da Sie den Filter entfernen sollen, wenn er nicht mehr benötigt wird, denke ich, dass die
loop_end
Aktion ein guter Ort dafür sein sollte und als Gegenstück wir ihn verwenden könnenloop_start
. Welches würde so aussehen:quelle
Sie verwenden
is_main_query()
falsch. Die globale Funktion is_main_query () gibt true zurück, sofern die globale Variable $ wp_query nicht neu definiert wurde.Es gibt wahrscheinlich keine hundertprozentig zuverlässige Möglichkeit, innerhalb eines the_content-Filters festzustellen, ob die aktuelle Schleife, in der Sie sich befinden, die Hauptabfrage ist oder nicht. Der Inhaltsfilter filtert nur den Inhalt. Es gibt keine Möglichkeit zu wissen, für welche Schleife es verwendet wird.
Fügen Sie stattdessen Ihren Filter hinzu, wenn Sie ihn benötigen, und entfernen Sie ihn, wenn Sie ihn nicht benötigen.
quelle
the_content
Filter