Je filtre le contenu avec le the_content
filtre. Tout fonctionne parfaitement, sauf que mes modifications sont également appliquées aux requêtes personnalisées. Mes modifications apparaissent également dans la barre latérale si le widget utilise une requête personnalisée
Pour contrer cela, j'utilise is_main_query()
pour cibler la requête principale uniquement, mais cela ne fonctionne pas. Les modifications sont tout simplement toujours appliquées à toutes les requêtes. Ce qui est drôle cependant, toutes les autres vérifications conditionnelles aiment is_single()
et is_category()
fonctionnent si je cible des pages spécifiques, sauf que toutes les modifications affectent toute autre requête personnalisée sur cette page, que j'utilise is_main_query()
ou non
Est-ce que j'ai râté quelque chose. Comment appliquer mes modifications à la requête principale uniquement à l'aide du the_content
filtre
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;
}
la source
is_main_query
, pense vraiment que personne ne l'a testé à fond. Merci pour votre contribution, vraiment appréciéeis_main_query
n'était pas une chose.Ceci n'est qu'un ajout à la réponse de @ Otto. Juste pour le rendre un peu plus compréhensible. Fondamentalement, ce que @Otto dit, vous devez inverser la logique, cela signifie: si vous pouvez déterminer de manière fiable la requête principale, vous pouvez ajouter - et supprimer - votre accrochage dans le
the_content
filtre.Par exemple, la requête principale peut être reconnue de manière fiable lors de l'
pre_get_posts
action, donc cela fonctionnerait:Comme vous êtes censé retirer le filtre lorsqu'il n'est plus nécessaire, je pense que l'
loop_end
action devrait être un bon endroit pour cela et que nous pouvons utiliser comme contrepartieloop_start
. Qui ressemblerait à ceci:la source
Vous utilisez
is_main_query()
mal. La fonction globale is_main_query () renvoie true sauf si la variable globale $ wp_query a été redéfinie.Il n'y a probablement aucun moyen fiable à 100% de savoir, depuis l'intérieur d'un filtre the_content, si la boucle actuelle dans laquelle vous vous trouvez est la requête principale ou non. Le filtre de contenu filtre uniquement le contenu. Il n'a aucune forme de capacité à savoir pour quelle boucle il est utilisé.
Au lieu de cela, vous devez ajouter votre filtre lorsque vous en avez besoin, puis le supprimer lorsque vous ne le faites pas.
la source
the_content
filtre