Comment puis-je créer une requête pour trouver des publications qui NE contiennent PAS une certaine méta clé ou méta valeur?
par exemple:
query_posts( array(
'meta_query' => array(
array( 'key' => 'feature', 'value' => '_wp_zero_value', 'compare' => '!=' ) )
) );
Obtenir des publications sans une certaine méta key est un peu délicat, notamment en raison de la conception de la base de données et de la nature des jointures SQL.
D'après les informations dont je dispose, le moyen le plus efficace serait de récupérer les ID de publication qui do ont la clé méta, puis de les exclure de votre requête.
// get all post IDs that *have* 'meta_key' with a non-empty value
$posts = $wpdb->get_col( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = 'my_key' AND meta_value != ''" );
// get all posts *excluding* the ones we just found
query_posts( array( 'post__not_in' => $posts ) );
$args = array(
'meta_query' => array(
'relation' => 'OR', //default AND
array(
'key' => 'feature',
'compare' => 'NOT EXISTS'
),
array(
'key' => 'feature',
'value' => '_wp_zero_value',
'compare' => '='
)
));
$the_query = query_posts($args);
var_dump($the_query);
Lire plus: Wordpress Doc
NB: avant la wordpress 3.9, il y a un bug C'est donc le travail à faire
array(
'key' => 'feature',
'compare' => 'NOT EXISTS',
'value' => '' //add this empty value check for check NOT EXISTS
),