Je travaille sur un site Web avec une fonction de recherche qui permet aux utilisateurs de rechercher à travers un grand nombre de méta post. Il existe un modèle de recherche spécifique pour lequel je ne voudrais renvoyer de force aucun résultat. Techniquement, le WP_Query trouvera des résultats dans la base de données, mais j'aimerais outrepasser cela d'une manière ou d'une autre pour le forcer à ne retourner aucun résultat pour déclencher l' if( $example->have_posts() )
échec.
Y a-t-il une sorte de paramètre que je peux transmettre à WP_Query comme 'force_no_results' => true
cela le forcerait à ne retourner aucun résultat?
WP_Query()
de ne retourner aucun résultat peut ou non être la meilleure façon de répondre à cette question. Il pourrait également être utile de décrire le modèle de recherche que vous souhaitez rendre impossible à interroger. Connaître le modèle de recherche pourrait aider à trouver une solution.Réponses:
Essayer
Simple et précis.
la source
post__in
renvoi de messages lors du passage d'un tableau vide ...array(0)
fonctionne très bien! C'est bizarre, mais cela peut en fait être attribué à un problème qui est survenu dans WP core en tant que bogue, mais qui a ensuite été laissé tel quelCurieusement, il n'y a pas de moyen clair / explicite de court-circuiter
WP_Query
.Si c'est la requête principale que vous pourriez résoudre
WP->parse_request()
, il semble y avoir undo_parse_request
filtre relativement récent (3.5) .Mais pour
WP_Query
lui-même, les hacks sales sont généralement en ordre, comme court-circuiter la requête SQL en l'ajoutantAND 1=0
via unposts_where
filtre, etc.la source
"post_type" => "break_loop"
un type de message inexistant.Les problèmes liés à la définition d'un paramètre de requête sur une valeur inexistante sont 2:
'posts_*'
crochets de filtre ('posts_where'
,'post_join'
, etc ..) qui agissent sur requête, de sorte que vous ne pouvez jamais être sûr que même la mise en unexistent param la requête ne renvoie aucun résultat, un simpleOR
article retourné par un filtre quelque chose faire de retour.Vous avez besoin d'un peu de routine hardcore pour être sûr qu'une requête ne renvoie aucun résultat et qu'il n'y a pas de problème de performance (ou très minimun).
Pour déclencher cette routine, vous pouvez utiliser toutes les méthodes, techniquement vous pouvez passer n'importe quel argument à des arguments d'
WP_Query
événement qui n'existent pas.Donc, si vous aimez quelque chose comme ça
'force_no_results' => true
, vous pouvez l'utiliser comme ceci:et ajoutez un rappel en cours d'exécution
'pre_get_posts'
qui fait le travail dur:Ce que fait ce code est exécuté le
'pre_get_posts'
plus tard possible. Si l'argument 'force_no_results' est présent dans la requête, alors:SELECT ID FROM wp_posts WHERE 0 = 1
une fois tous les filtres supprimés, il n'y a aucune possibilité que cette requête soit modifiée et elle est très rapide, et n'a aucun résultat sûrla source