J'essaie d'obtenir une requête pour récupérer tous les messages où un spécifique meta_key
n'existe pas, puis le créer.
J'ai des problèmes pour trouver ces publications, car la requête que je teste ne semble pas fonctionner.
Voici le code que j'utilise pour essayer de recevoir ces publications:
$args = array(
'posts_per_page' => 18,
'cat'=>1955,
'post_status'=>'publish',
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS'
),
));
query_posts($args);
Cela ne retourne rien s'il n'y a pas de messages avec la clé colors
, mais les renvoie ids
avec la clé colors
chaque fois que cette clé est présente (l'inverse de ce dont j'ai besoin). J'ai essayé avec EXIST
au lieu mais pas de chance.
Si quelqu'un peut me conseiller sur la manière correcte de créer une requête comme celle dont j'ai besoin, je l'apprécierai.
Merci!
custom-post-types
wp-query
post-meta
JordanBel
la source
la source
Réponses:
J'ai fait quelques tests supplémentaires avec cela, et honnêtement, je ne trouve pas de raison que cela ne fonctionne pas (à moins que le code ci-dessus ne soit qu'un extrait et que le code réel corresponde à mes exemples ci-dessous). J'ai toutefois découvert quelques éléments qui pourraient vous conduire dans la bonne direction.
1) En elle-même, cette méta-requête est l’équivalent de "colors IS NULL", c’est-à-dire qu’elle renverra les publications qui n’ont pas cette clé définie dans la table postmeta. C'est le cas montré ci-dessus, et cela aurait dû fonctionner.
2) Avant WordPress 3.9, établir l’index de 'relation' sur 'OU' change cette condition. Il retourne le contraire. Ne me demande pas pourquoi. Ceci est particulièrement important lorsque vous effectuez plusieurs méta-requêtes. Cela signifie qu'il n'est pas initialement possible d'effectuer une requête pour les publications pour lesquelles la clé "couleurs" est définie sur "bleu" (ou autre) ou n'est pas définie du tout. La requête ci-dessous ignorera la première condition et renverra uniquement celles qui correspondent à la deuxième condition.
3) Cependant, nous pouvons tromper WordPress en utilisant la première condition si nous définissons la "valeur". Elle n'a pas besoin d'une valeur pertinente (elle est ignorée, autant que je sache), mais elle doit être définie pour que la
NOT EXISTS
condition ait un effet.C'était vrai jusqu'à WordPress 3.9. Si vous utilisez toujours une version plus ancienne, cette solution de contournement est viable.
la source
EXISTS
etNOT EXISTS
"bug" qui vous demandait de spécifier une valeur a été corrigé dans WP 3.9En utilisant une requête personnalisée, cela a fonctionné pour moi:
la source