指定& # 39;post_per_page& # 39;对于多个post循环


Specifying 'post_per_page' for multiple post loop

我创建了一个post循环,显示两种不同类型的post ('portfolio'和'post')。

<?php 
    $work = array(
        'post_type' => array('portfolio','post'),
        'posts_per_page' => '8',
    );
    $loop = new WP_Query( $work );
        while ( $loop->have_posts() ) : $loop->the_post();
            if ( get_post_type() == 'portfolio' ) {
                // My portfolio code will go here
            } 
            else if ( get_post_type() == 'post' ) {
                // My post code will go here
            }
        endwhile;
?>

这似乎工作得很好,但我想做的是限制每个类型显示的帖子数量。我已经将其设置为总体限制为8,但我想进一步扩展并将每个类型限制为4(4 + 4 =总体8)。

嘿,我想不出一个简单的解决方案,但你有一些实现这一目标的可能性。

  1. 查询所有帖子并制作计数器(如果帖子非常多,性能会很差)

    $work = array(
        'post_type' => array('portfolio','post'),
        'posts_per_page' => -1,
    );
    $count_portfolio = 0;
    $count_post = 0;
    $loop = new WP_Query( $work );
        while ( $loop->have_posts() ) : $loop->the_post();
            if ( get_post_type() == 'portfolio' && $count_portfolio < 4 ) {
                $count_portfolio++;
            } 
            else if ( get_post_type() == 'post' && $count_post < 4) {
                $count_post++;
            }
            if($count_portfolio >=3 && $count_post >=3)  {
                break;
            }
    
        endwhile;
    
  2. 进行两个不同的查询-一个用于最近四个作品集,一个用于最近4个帖子

 // pseudo code
 $allposts = array_merge($query1->posts, $query2->posts);
 usort($allposts,'orderbydate_custom_function');
 foreach($allposts as $post) {
     // do output
 }
  • 使用$wpdb自定义调用来查询您想要的内容