2017-04-15 14 views
0

私のサイトには2つのセクションがあります。最初はポピュラーな投稿(ビューに基づく)、2番目のセクションは最近の投稿です。 投稿が既に人気の投稿セクションにある場合は、[最近の投稿]セクションに表示したくありません。以下は私のコードです。最初のループでは、そのセクションにあるすべての投稿IDを格納する配列を作成しました。 2番目のループでは、idが配列内にあるかどうかを確認します(最適な解決策ではない可能性があります)。 $conttrue必要な回数(echoでチェック)になっても、何らかの理由で最初の複製でのみ機能します。だから何を与える?Wordpress - すでに別のループに表示されている投稿を表示しない

<?php 
    $popularpost = new WP_Query(array('posts_per_page' => 4, 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' )); 
    $counter=0; 
    $post_ids = array(); 
    while ($popularpost->have_posts()) : $popularpost->the_post(); 
     $postID = get_the_ID(); 
     $post_ids[$counter] = $postID; 
    ?> 
    <a href="<?php the_permalink(); ?>" class="" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a> 

    <?php $counter++; ?> 
    <?php endwhile; ?> 

    <?php $myquery = new WP_Query('posts_per_page=6'); 
    while ($myquery->have_posts()) : $myquery->the_post(); ?> 
    <?php $post_id = get_the_ID(); ?> 
    <?php $post_ids_length = count($post_ids); ?> 
    <?php for ($i=0; $i < $post_ids_length; $i++) { 
      if ($post_id == $post_ids[$i]) { 
       $cont = "true"; 
      } else { 
       $cont = "false"; 
      } 
    } ?> 
    <?php if ($cont == "true") { 
     continue; 
    } ?> 

    <a href="<?php the_permalink(); ?>" class=""><?php the_title(); ?></a> 
    <?php endwhile; ?> 

答えて

2

次のようにあなたの2番目のクエリを更新します。

$args2 = array('post__not_in' => $post_ids,'posts_per_page' => 6); 
$myquery = new WP_query($args2); 

そしてちょうどWhileループを使用して結果を反復処理します。

+0

ありがとうございました。しかし、なぜ私のコードがうまくいかなかったのかが気になっています。どういう考えがありますか? – kulan

+0

あなたのコードが間違っています。人気のあるidに等しいidを見つけると、forループを終了しないので、続行します。最後の配列でなければ、$ cont変数は次のループでfalseに設定されます。したがって、コードは配列内の最後のIDである1つのポストに対してのみ動作します。あなたのコードは、あなたが 'break; '$ cont = "true"の後に;' –

+0

@kulan最適化コードを書くことをお勧めします。クエリ自体を渡すオプションがある場合は、カスタム実装を行うべきではありません。 –

関連する問題