使用pre_get_posts显示每个自定义帖子类型的最新帖子

时间:2014-03-05 20:00:53

标签: custom-post-type wordpress

我有什么


在我的首页上,我设法改变首页上的主要查询,以显示我的自定义帖子类型,其中包含“pre_get_posts”:

function custom_post_types_in_home_loop( $query ) {

    if ( ! is_admin() && is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', array( 'member',  'press', 'calendar_event' ) );
    }

    return $query;

}

add_filter( 'pre_get_posts', 'custom_post_types_in_home_loop' );

我想要什么


问题在于某些帖子类型的帖子比其他帖子类型多,所以我想每个帖子类型只显示3个帖子,以便在循环中获得一点变化。

我尝试了什么


thisthis的帮助下,我设法做到了但没有发生任何事情,我做错了什么?

function custom_post_types_in_home_loop( $query ) {

    if ( ! is_admin() && is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', array( 'member',  'press', 'calendar_event' ) );

        if ( $query->get( 'post_type' ) == 'member' ) {
            $query->set('posts_per_page',  3);
        }

        /* And the same 'if' statement for 'press' and 'calendar_event' */
    }

    return $query;

}

add_filter( 'pre_get_posts', 'custom_post_types_in_home_loop' );

1 个答案:

答案 0 :(得分:1)

您将主查询的post_type设置为array。然后将其与string进行比较。这些条件都不是真的,因此没有执行。

如果您只想限制查询数量并选择随机顺序,可以使用

$query->set('posts_per_page', 9);
$query->set('orderby', 'rand);

这将为您提供9个帖子,每个帖子3个,在不同的自定义帖子类型之间随机选择。

要将不同类型保持在一起,您需要构建更复杂且资源密集型的groupby查询。如果您需要,我建议为每个post_type构建3个不同的自定义循环。