Filtruję zawartość za pomocą the_content
filtra. Wszystko działa idealnie, fragment, że moje zmiany są również stosowane do niestandardowych zapytań. Moje zmiany pojawiają się również na pasku bocznym, jeśli widżet korzysta z niestandardowego zapytania
Aby temu przeciwdziałać, używam tylko is_main_query()
do kierowania zapytania głównego, ale to nie działa. Zmiany są po prostu nadal stosowane do wszystkich zapytań. Co zabawne, wszystkie inne kontrole warunkowe lubią is_single()
i is_category()
działają, jeśli kieruję reklamy na określone strony, z wyjątkiem tego, że wszystkie zmiany wpływają na wszelkie inne niestandardowe zapytania na tej stronie, niezależnie od tego, czy używam, is_main_query()
czy nie
Czy coś mi umyka. Jak zastosować zmiany do głównego zapytania tylko przy użyciu the_content
filtra
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;
}
źródło
is_main_query
, naprawdę myślę, że nikt nie przetestował tego dokładnie. Dziękujemy za wkład, bardzo docenianyis_main_query
nie była niczym.To tylko dodatek do odpowiedzi @ Otto. Żeby było trochę lepiej zrozumiałe. Zasadniczo, co mówi @Otto, musisz odwrócić logikę, co oznacza: jeśli możesz wiarygodnie określić główne zapytanie, możesz dodać - i usunąć - zaczepienie do
the_content
filtra.Na przykład główne zapytanie może być niezawodnie rozpoznane w
pre_get_posts
akcji, więc zadziałałoby:Ponieważ powinieneś usunąć filtr, gdy nie jest już potrzebny, myślę, że
loop_end
akcja powinna być dobrym miejscem do tego i jako jego odpowiednika możemy użyćloop_start
. Który wyglądałby tak:źródło
Używasz
is_main_query()
nieprawidłowo. Globalna funkcja is_main_query () zwraca true, chyba że globalna zmienna $ wp_query została ponownie zdefiniowana.Prawdopodobnie nie ma w 100% wiarygodnego sposobu, aby stwierdzić, z poziomu filtra the_content, czy bieżąca pętla, w której jesteś, jest głównym zapytaniem, czy nie. Filtr treści po prostu filtruje zawartość. Nie ma żadnej zdolności do zrozumienia, do jakiej pętli jest używany.
Zamiast tego należy dodać filtr, gdy jest on potrzebny, a następnie usunąć, gdy nie jest potrzebny.
źródło
the_content
filtra