在自定义查询中按帖子类型拆分的最有效方法是什么?

时间:2017-12-09 作者:Runnick

将自定义WP\\U查询结果拆分为不同帖子类型的最佳方法是什么?

我正在使用多个查询,但它是性能方面最有效的解决方案吗?

$results = new WP_Query(array(\'post_type\' => \'post_type_1\'));
$results2 = new WP_Query(array(\'post_type\' => \'post_type_2\'));

if have posts 
   ...loop $results

if have posts 
   ...loop $results2

2 个回复
SO网友:Nicolai Grossherr

无需拆分查询或执行多个查询。只需使用参数orderby 有价值的post_type 按帖子类型进行排序。您可以使用第二个值进行额外排序,例如date. 看见Codex: Class Reference | WP_Query | Order & Orderby Parameters 了解更多信息。

SO网友:Ben HartLenn

您可以尝试对数据库中的所有结果执行一次查询,然后使用get_post_type() 将结果分解为每个帖子类型的单独循环。如果PHP操作比使用两个数据库查询更快,那么根据您正在使用的内容,它可能会提高性能,不过您必须自己进行测试。

<?php
$all_results = new WP_Query([
    \'post_type\' => [\'post_type_1\', \'post_type_2\'] 
]);

// initiate counter variables
$count_post_type_1s = 0;
$count_post_type_2s = 0;

while ( $all_results->have_posts() ) : $all_results->the_post();
    if( get_post_type($post) == \'post_type_1\' ) {
        // increment counter variable for post type 1 being found
        $count_post_type_1s++;
        // post_type_1 output
        the_title();
    }
endwhile;
// check if counter variable is still 0, if it is no post type 1\'s were found
if( $count_post_type_1s == 0 ) {
    echo "No post type 1\'s have been found";
}

 // Rewind posts to use same query again
$all_results->rewind_posts();

// do some stuff in between loops

while ( $all_results->have_posts() ) : $all_results->the_post();
    // increment counter variable for post type 2 being found
    $count_post_type_2s++;
    if( get_post_type($post) == \'post_type_2\' ) {
        // post_type_2 output
        the_title();
    }
endwhile;
// check if counter variable is still 0, if it is no post type 2\'s were found
if( $count_post_type_2s == 0 ) {
    echo "No post type 2\'s have been found";
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post