запрос с настраиваемым мета-полем с помощью meta_query

Как мы получаем сообщения, в которых мета-ключ не существует в сообщении. Я создал видео meta_key. и я хочу получить некоторые сообщения с WP_Query, где пользовательское полевое видео не существует или пустое.

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

Это не работает.

На самом деле есть лучшее решение, которое, как мы надеемся, будет развернуто в WordPress 3.4 – вы можете запустить исправление как исправление, если хотите, но вот ссылка TRAC для патча:

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

С этим вы можете сделать …

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

или, если хотите, замените его 'compare' => 'EXISTS'.

-Джордж

Вы можете использовать posts_where filter hook и создать подзапрос, чтобы исключить все сообщения с помощью meta_key видео:

 // 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' ); 
 $my_query = new WP_Query( array( 'meta_query' => array( array( 'key' => 'foo', 'compare' => 'NOT EXISTS' ) ) ) ); 

используется только в WP 3.5. На данный момент это бета-версия.