2016-10-28 63 views
1

我创建了一个帖子循环,显示2种不同类型的帖子('portfolio'和'post')。为多个帖子循环指定'post_per_page'

<?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)。

回答

0

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

  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 
} 
  1. 使用$ wpdb进行自定义调用以准确查询您想要的内容
+0

感谢您的回复。我不喜欢计算帖子的想法,因为这会对表现产生重大影响。我可能会创建2个独立的函数并分别运行它们。 – zvalliji

+0

如果绩效很重要,您可能最好使用选项2)或3)。但是1)是最快实施的。 – Blackbam

+0

谢谢你,我已经将你的评论标记为正确。 – zvalliji