从多个帖子类型获取帖子

时间:2017-10-04 作者:Trello

我需要通过两个查询显示来自多个帖子类型的帖子,因此我找到了以下答案:How to display posts from multiple post type in random order in wordpress?

但无法使用它获取帖子内容或帖子标题等帖子数据,答案的作者写道我必须通过setup\\u postdata设置,但我无法理解。

需要帮忙吗?

1 个回复
最合适的回答,由SO网友:LWS-Mo 整理而成

因此,您需要从多个帖子类型中查询帖子,但也需要使用不同的查询参数,如自定义字段、tax\\u查询或类别。

由于您没有发布您尝试、已经或想要的内容,请尝试以下内容:

我们使用3个查询来设置所有内容。可以为每个查询添加不同的参数。

收到post ID´s 从我们的第一个帖子类型,product:

$first_post_ids = get_posts( array(
    \'fields\'         => \'ids\', // only return post ID´s
    \'posts_per_page\' => \'5\',
    \'post_type\'      => array(\'product\'),
));
获取post ID´s 从我们的第二个帖子类型来看,post:

$second_post_ids = get_posts( array(
    \'fields\'         => \'ids\', // only return post ID´s
    \'posts_per_page\' => \'5\',
    \'post_type\'      => array(\'post\'),
));
将两个查询合并为一个:

$merged_post_ids = array_merge( $first_post_ids, $second_post_ids);
生成第三个查询:

$wp_query = new WP_Query( array(
    \'post_type\' => \'any\', // any post type
    \'post__in\'  => $merged_post_ids, // our merged queries
) );
循环:

if ( $wp_query->have_posts() ) : 
    while ( $wp_query->have_posts() ) : $wp_query->the_post();

        //look at $post here !!
        //Example: $post->post_type;
        //this return the type of each post so you can do checks and stuff

        //for example show title and content
        the_title( \'<h2>\', \'</h2>\' );
        the_content();

    endwhile;

    // reset after query
    wp_reset_query();

else :
    echo \'Sorry, no posts matched your criteria.\';
endif;
<小时>Update: Check if array_merge is not null to prevent any types showing

array_merge 用于合并2个数组,顾名思义。

例如,如果$first_post_ids 是一个string, 那就行不通了。这就是为什么我们使用\'fields\' => \'ids\', 在我们的查询中<因为正如法典所说:

“ids”-返回post ID的数组。

即使这两个查询中有一个是空的(即我们没有帖子),array_merge 仍然有效。

但我们可以检查array_merge:

//... first two queries

$merged_post_ids = array_merge( $first_post_ids, $second_post_ids );

//check if the array_merge exists/not null
if ( $merged_post_ids ) {

    $wp_query = new WP_Query( array(
        \'post_type\' => \'any\', // any post type
        \'post__in\'  => $merged_post_ids, // our merged queries
    ) );

    //... your query code here

}//END if $merged_post_ids
您还可以使用else 语句以运行另一个查询。

结束