我正在尝试使用get\\u posts()来提取尚未分配特定自定义字段的文章。例如(不工作):
$articles = get_posts(array(
\'post_parent\' => 0,
\'post_type\' => \'custom-type\',
\'meta_query\' => array(
array(
\'key\' => \'alternate_page\',
\'value\' => array(0, \'\', null),
\'compare\' => \'IN\'
),
)
));
基本上,我希望所有“自定义类型”文章都没有父级,也没有分配“alternate\\u page”自定义字段。
我在其他地方读到过关于执行两个查询的内容,一个是针对所有具有自定义字段的文章,获取和排列它们的ID,以及使用“\\uu post\\u not\\u in”参数,但这似乎很乏味。
是否可以在上述一个查询中执行?谢谢
SO网友:Milo
你可以用posts_where
筛选器和子查询。请注意,必须显式设置suppress_filters
为假,如get_posts
通常忽略过滤器:
function wpse28018_posts_where( $where ) {
global $wpdb;
$where .= " AND {$wpdb->posts}.ID NOT IN ( SELECT DISTINCT post_id FROM {$wpdb->postmeta} WHERE meta_key = \'alternate_page\' )";
return $where;
}
// add the filter
add_filter( \'posts_where\' , \'wpse28018_posts_where\' );
// do the query
$articles = get_posts(array(
\'post_parent\' => 0,
\'post_type\' => \'custom_type\',
\'suppress_filters\' => false
));
// remove the filter so other queries aren\'t affected.
remove_filter( \'posts_where\' , \'wpse28018_posts_where\' );