使用带有META_QUERY的自定义元字段进行查询

时间:2011-05-31 作者:Yalamber

如果帖子中不存在meta键,我们如何获取帖子。我已经创建了一个meta\\u key视频。我希望能够获得一些带有WP\\U查询的帖子,其中自定义字段视频不存在或为空。

$fsquery = new WP_Query( 
                        array ( 
                        \'posts_per_page\' => 1,
                        \'featured\' => \'yes\',
                        \'meta_key\'=>\'video\',
                        \'meta_value\'=>\'\'
                        )
                    );
这不起作用。

3 个回复
最合适的回答,由SO网友:George Stephanis 整理而成

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”。

-乔治

SO网友:Bainternet

您可以使用posts_where 过滤挂钩并创建子查询,以排除所有带有视频meta\\u键的帖子:

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

SO网友:Solr Newbie

$my_query = new WP_Query( 
        array( 
            \'meta_query\' => array( 
                array(
                    \'key\' => \'foo\',
                    \'compare\' => \'NOT EXISTS\'
                )
            ) 
        ) 
    );
仅在WP 3.5中使用。目前它仍然是测试版。

结束

相关推荐