Estoy filtrando el contenido con el the_content
filtro. Todo funciona perfecto, extracto de que mis cambios también se aplican a consultas personalizadas. Mis cambios también aparecen en la barra lateral si el widget utiliza una consulta personalizada
Para contrarrestar eso, estoy usando is_main_query()
solo la consulta principal, pero no funciona. Los cambios simplemente se aplican a todas las consultas durante todo el proceso. Sin embargo, lo que es divertido, a todas las demás verificaciones condicionales les gusta is_single()
y is_category()
funciona si apunto a páginas específicas, excepto que todos los cambios afectan cualquier otra consulta personalizada en esa página, ya sea que la use is_main_query()
o no.
Me estoy perdiendo de algo. ¿Cómo aplico mis cambios a la consulta principal solo usando el the_content
filtro?
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;
}
fuente
is_main_query
, realmente creo que nadie lo probó a fondo. Gracias por tu aporte, realmente apreciadois_main_query
no era una cosa.Esto es simplemente una adición a la respuesta de @ Otto. Solo para hacerlo un poco mejor comprensible. Básicamente, lo que dice @Otto es que debes invertir la lógica, es decir: si puedes determinar de manera confiable la consulta principal, entonces puedes agregar, y eliminar, tu enganche en el
the_content
filtro.Por ejemplo, la consulta principal se puede reconocer de manera confiable en
pre_get_posts
acción, por lo que esto funcionaría:Como se supone que debe eliminar el filtro cuando ya no sea necesario, creo que la
loop_end
acción debería ser un buen lugar para eso y, como contrapartida, podemos usarloloop_start
. Que se vería así:fuente
Estás usando
is_main_query()
incorrectamente. La función global is_main_query () devuelve verdadero a menos que la variable global $ wp_query se haya redefinido.Probablemente no haya una forma 100% confiable de saber, desde el interior del filtro the_content, si el bucle actual en el que se encuentra es o no la consulta principal. El filtro de contenido solo filtra el contenido. No tiene ninguna forma de saber para qué bucle se está utilizando.
En su lugar, debe agregar su filtro cuando lo necesite y luego eliminarlo cuando no lo necesite.
fuente
the_content
filtro