it-swarm.com.de

wie man Beiträge anzeigt, denen ein meta_value fehlt

Wie kann ich eine Abfrage erstellen, um Posts zu finden, die KEINEN bestimmten Metaschlüssel oder Metawert enthalten?

zum Beispiel:

query_posts( array( 
    'meta_query' => array(
        array( 'key' => 'feature', 'value' => '_wp_zero_value', 'compare' => '!=' )         )
) );
6
dwenaus

Das Abrufen von Posts ohne ein bestimmtes Meta key ist aufgrund des Datenbankdesigns und der Art der SQL-Joins etwas schwierig.

AFAIK, der effizienteste Weg wäre, die Post-IDs, die do den Metaschlüssel haben, tatsächlich zu erfassen und sie dann von Ihrer Abfrage auszuschließen.

// 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);

Lesen Sie weiter: Wordpress Doc

NB: vor dem WordPress 3.9 gibt es einen Bug Das ist also die Problemumgehung

array(
       'key' => 'feature',
       'compare' => 'NOT EXISTS',
       'value' => '' //add this empty value check for check NOT EXISTS
      ),
0
Alupotha