带有复杂‘POST_STATUS’参数的自定义WP_QUERY

时间:2013-01-18 作者:Xhynk

我正在试着运行WP_Query() 有点扭曲。

我需要包括两个post_status并明确排除另一个。

我有WP_Query( array( \'post_status\' => array( \'publish\', \'customstatus\' ) ) ); 这是可行的,但似乎也有吸引力auto-draft, 这是我不能拥有的。

有没有办法做到像

\'post_status\' => array( array(\'publish\', \'customstatus\'), \'not_in\' => \'auto-draft\' ))

在哪里我可以包含两个并明确排除一个?

1 个回复
SO网友:kaiser

注意事项:

这取决于查询的页面类型,如果您登录,private 例如,将绘制post状态。

使用过滤器,因为状态是添加到WHERE 子句中,您有一个非常特定的过滤器,可以用来更改实际的查询字符串。

apply_filters_ref_array(\'posts_where\', array( $where, &$this ) );
因此,实际回调与下面的一般示例非常接近:

add_filter( \'posts_where\', \'wpse82200_posts_where_status\' );
function wpse82200_posts_where_status( $where, $query )
{
    // Run only once; Don\'t intercept later queries
    remove_filter( current_filter(), __FUNCTION__ );

    // Do your replace logic here

    return $where;
}
当然,您应该在执行查询的行之前添加过滤器回调,这样就不会出现任何问题。该示例在触发一次后自动删除。

结束

相关推荐

NEXT_POSTS_LINK()仅适用于原始的$wp_Query

我有一个自定义模板,我想显示分页的博客文章。这是我的文件的开头:$wp_query = new WP_Query($args); if($wp_query->have_posts()){ while($wp_query->have_posts()){ $wp_query->the_post(); //something... <?php next_posts_link(\'Older Entri