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.
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // this should work...
),
)
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.
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // doesn't work
),
array(
'key' => 'colors',
'value' => 'blue'
)
)
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.
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'colors',
'compare' => 'NOT EXISTS', // works!
'value' => '' // This is ignored, but is necessary...
),
array(
'key' => 'colors',
'value' => 'blue'
)
)
C'était vrai jusqu'à WordPress 3.9. Si vous utilisez toujours une version plus ancienne, cette solution de contournement est viable.