web-dev-qa-db-fra.com

interroger avec méta champ personnalisé avec meta_query

Comment pouvons-nous obtenir des publications où la clé méta n'existe pas dans une publication. J'ai créé une vidéo meta_key. et je veux pouvoir obtenir des publications avec WP_Query où la vidéo de champ personnalisé n'existe pas ou est vide.

$fsquery = new WP_Query( 
                        array ( 
                        'posts_per_page' => 1,
                        'featured' => 'yes',
                        'meta_key'=>'video',
                        'meta_value'=>''
                        )
                    );

ça ne marche pas.

3
Yalamber

Il existe en fait une meilleure solution qui sera (espérons-le) déployée dans WordPress 3.4 - vous pouvez exécuter le correctif maintenant comme correctif si vous le souhaitez, mais voici le lien TRAC pour le correctif:

http://core.trac.wordpress.org/ticket/18158

Avec ça, tu peux faire ...

    $my_query = new WP_Query( 
        array( 
            'meta_query' => array( 
                array(
                    'key' => 'foo',
                    'compare' => 'NOT EXISTS'
                )
            ) 
        ) 
    );

ou, remplacez-le par 'compare' => 'EXISTS' si vous le souhaitez.

-George

2
Daljo628

Vous pouvez utiliser le crochet de filtre posts_where et créer une sous-requête pour exclure toutes les publications avec la méta-clé de la vidéo:

// Create a new filtering function that will add our where clause to the query
function filter_where_WPSE_18787( $where = '' ) {

    $where .= " AND ID NOT IN ( SELECT DISTINCT post_id from $wpdb->postmeta WHERE meta_key = 'video' )";
    return $where;
}
add_filter( 'posts_where', 'filter_where_WPSE_18787' ); 

$fsquery = new WP_Query( 
    array ( 
        'posts_per_page' => 1,
        'featured' => 'yes'
        ));

remove_filter('posts_where', 'filter_where_WPSE_18787' ); 
1
Bainternet
$my_query = new WP_Query( 
        array( 
            'meta_query' => array( 
                array(
                    'key' => 'foo',
                    'compare' => 'NOT EXISTS'
                )
            ) 
        ) 
    );

utilisé uniquement dans WP 3.5. C'est encore une version beta pour le moment.

1
Solr Newbie