尚未分配特定自定义域的GET_POST

时间:2011-09-08 作者:robertwbradford

我正在尝试使用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”参数,但这似乎很乏味。

是否可以在上述一个查询中执行?谢谢

1 个回复
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\' );

结束

相关推荐