2016-10-28 3 views
1

2種類の投稿( 'ポートフォリオ'と '投稿')を表示するポストループを作成しました。複数のポストループに '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

私は簡単な解決策は考えられませんが、これを達成するにはいくつかの可能性があります。最後の4つのポストのための最後の4つのポートフォリオの1と1 - (あなたは非常に多くのポストを持っている場合、パフォーマンスが悪い)

  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. は、2つの異なるクエリを作るカウンターを作ります

// 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

関連する問題