web-dev-qa-db-fra.com

comment afficher les publications pour lesquelles il manque une meta_value

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' => '!=' )         )
) );
6
dwenaus

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 ) );
7
TheDeadMedic
$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
      ),
0
Alupotha