J'ai un CPT mis en place avec une taxonomie personnalisée qui y est attachée. J'ai récemment remarqué que si je cherchais 0
(zéro), à la fois dans le back-end et dans le front-end, cela me donnait des résultats. Aucun de ces messages résultants n'a 0
nulle part dans le titre ainsi que dans le contenu. De toute façon, je n’ai pas modifié la boucle, c’est juste le modèle de recherche classique. Cela me fait penser à 2 choses:
0
?Des idées?
Update:
D'après les commentaires ci-dessous, je mets à jour mon exigence:
Existe-t-il un moyen de rechercher les publications contenant 0
dans le titre ou dans le contenu, lorsque 0
est entré comme clé de recherche?
Considérant le commentaire de @Mayeenul Islam:
Je viens de tester un thème vierge avec des données factices, la recherche avec 0 (zéro) a lancé une recherche vide - cela signifie tout:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type IN ('post', 'page', 'attachment') AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_date DESC LIMIT 0, 10
et le fait que wp-includes/query.php
contient
if ( ! empty( $q['s'] ) ) {
$search = $this->parse_search( $q );
}
, nous pouvons voir que !empty($q['s'])
, où $q['s'] == 0 (or "0")
retournera FALSE
. Cela signifie que la requête de recherche n'aura pas de partie LIKE
, lorsque $q['s'] == 0
et retournera "toutes" les publications, car rien ne restreint la requête avec des conditions spécifiques, qui devrait se trouver dans la partie LIKE
.
Ceci est confirmé par empty()
documentation de la fonction:
Les éléments suivants sont considérés comme vides:
...
- 0 (0 as an integer)
- "0" (0 sous forme de chaîne)
...
Pour cette raison, nous ne sommes pas en mesure de filtrer/mettre à jour, "0" afin de transmettre la logique conditionnelle if-empty. Ce que je suggère est une requête mise à jour au cas où les utilisateurs vont rechercher "0".
Voici une solution permettant d'autoriser les utilisateurs à rechercher "0".
add_filter("posts_where", "search_hotfix", 10, 1);
function search_hotfix($where_clause){
if(get_query_var('s') == 0){
$where_clause .= " AND (((wp_posts.post_title LIKE '%0%') OR (wp_posts.post_content LIKE '%0%'))) ";
}
return $where_clause;
}
UPDATE:
Et voici une solution rapide pour arrêter WP rechercher "0". Ce code obligera WP_Query à ne fournir aucun résultat.
add_action('pre_get_posts', 'search_hotfix_reset_q');
function search_hotfix_reset_q($query){
if ( get_query_var('s') == 0) {
$query->query_vars['post__in'] = array(0);
}
}