web-dev-qa-db-de.com

abfrage mit benutzerdefiniertem Metafeld mit meta_query

Wie erhalten wir Beiträge, bei denen der Metaschlüssel in einem Beitrag nicht vorhanden ist? Ich habe ein meta_key-Video erstellt. und ich möchte in der Lage sein, einige Pfosten mit WP_Query zu erhalten, in denen kundenspezifisches Feldvideo nicht existiert oder leer ist.

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

das funktioniert nicht.

3
Yalamber

Es gibt tatsächlich eine bessere Lösung, die (hoffentlich) in WordPress 3.4 eingeführt wird - Sie können den Patch jetzt als Hotfix ausführen, wenn Sie möchten, aber hier ist der TRAC-Link für den Patch:

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

Damit können Sie ...

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

oder tauschen Sie es stattdessen gegen 'compare' => 'EXISTS' aus, wenn Sie möchten.

-George

2
Daljo628

Sie können posts_where filter hook verwenden und eine Unterabfrage erstellen, um alle Posts mit dem meta_key von video auszuschließen:

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

wird nur in WP 3.5 verwendet. Im Moment ist es noch eine Beta-Version.

1
Solr Newbie