在Pre_Get_Posts内修改的查询中包括默认和自定义发布类型

时间:2014-03-09 作者:Eels

我想在author arhive页面中包含自定义帖子类型。我尝试了本文中讨论的方法:

Including post_type = 'wiki' in author archives

add_action( \'pre_get_posts\', \'custom_post_author_archive\' );
function custom_post_author_archive( &$query )
{
    if ( $query->is_author )
    {
        $query->set( \'post_type\', \'custom_name\' );
        remove_action( \'pre_get_posts\', \'custom_post_author_archive\' ); // run once!
    }
}
但通过此方法,只查询custom\\u name post。我想查询custom\\u name帖子和普通帖子。

我需要做哪些更改?

2 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

正如Kaiser所提到的post_type 参数可以接受post类型的数组。更新要使用的函数is_main_query() 要将过滤器仅限于“main”查询,代码如下所示:

add_action( \'pre_get_posts\', \'custom_post_author_archive\' );
function custom_post_author_archive( $query )
{
    if ( is_main_query() && is_author() )
    {
        set_query_var( \'post_type\', array(\'post\',\'custom_post\') );
    }
}

SO网友:kaiser

简单地说$query 内部参数pre_get_posts 指的是WP_Query 可以看到的类/对象in core.

do_action_ref_array( \'pre_get_posts\', array( &$this ) );
这意味着任何附加到挂钩的回调/操作都可以执行与new WP_Query( [ etc. ] ); 可以。因此,您可以使用array of post types

结束