0
私のサイトには2つのセクションがあります。最初はポピュラーな投稿(ビューに基づく)、2番目のセクションは最近の投稿です。 投稿が既に人気の投稿セクションにある場合は、[最近の投稿]セクションに表示したくありません。以下は私のコードです。最初のループでは、そのセクションにあるすべての投稿IDを格納する配列を作成しました。 2番目のループでは、idが配列内にあるかどうかを確認します(最適な解決策ではない可能性があります)。 $cont
がtrue
必要な回数(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; ?>
ありがとうございました。しかし、なぜ私のコードがうまくいかなかったのかが気になっています。どういう考えがありますか? – kulan
あなたのコードが間違っています。人気のあるidに等しいidを見つけると、forループを終了しないので、続行します。最後の配列でなければ、$ cont変数は次のループでfalseに設定されます。したがって、コードは配列内の最後のIDである1つのポストに対してのみ動作します。あなたのコードは、あなたが 'break; '$ cont = "true"の後に;' –
@kulan最適化コードを書くことをお勧めします。クエリ自体を渡すオプションがある場合は、カスタム実装を行うべきではありません。 –