Estou filtrando o conteúdo com o the_content
filtro. Tudo funciona perfeitamente, exceto que minhas alterações também são aplicadas a consultas personalizadas. Minhas alterações também aparecem na barra lateral se o widget usar uma consulta personalizada
Para combater isso, estou usando is_main_query()
apenas a consulta principal, mas ela não está funcionando. As alterações ainda são simplesmente aplicadas a todas as consultas. O que é engraçado, porém, todas as outras verificações condicionais gostam is_single()
e is_category()
estão funcionando se eu segmentar páginas específicas, exceto que todas as alterações afetam qualquer outra consulta personalizada nessa página, se eu uso is_main_query()
ou não
Estou faltando alguma coisa aqui. Como aplico minhas alterações à consulta principal usando apenas o 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;
}
fonte
is_main_query
, realmente acha que ninguém testou isso completamente. Obrigado pelo seu contributo, muito apreciadois_main_query
não era nada.Isso é apenas uma adição à resposta de @ Otto. Apenas para torná-lo um pouco melhor compreensível. Basicamente, o que @Otto está dizendo, você precisa reverter a lógica, o que significa: se você pode determinar com segurança a consulta principal, pode adicionar - e remover - sua conexão ao
the_content
filtro.Por exemplo, a consulta principal pode ser reconhecida com segurança na
pre_get_posts
ação, portanto, isso funcionaria:Como você deve remover o filtro quando não for mais necessário, acho que a
loop_end
ação deve ser um bom lugar para isso e, como contrapartida, podemos usarloop_start
. O que ficaria assim:fonte
Você está usando
is_main_query()
incorretamente. A função global is_main_query () retorna true, a menos que a variável global $ wp_query tenha sido redefinida.Provavelmente, não há uma maneira 100% confiável de informar, de dentro de um filtro the_content, se o Loop atual em que você está ou não é a consulta principal ou não. O filtro de conteúdo apenas filtra o conteúdo. Ele não tem nenhuma forma de capacidade de saber para que loop está sendo usado.
Em vez disso, você deve adicionar seu filtro quando precisar e removê-lo quando não precisar.
fonte
the_content
filtro