'関連A'というカスタムフィールドに入っているpostをforeachでループさせてる中で、'関連B'というカスタムフィールドにも属していた場合に何番目かという処理を書いたのですが、値が入っていないpostのときにも、その一個前の値が反映されてしまい、うまく機能しません。
<ul> <?php $page = get_page_by_path('関連Aの固定ページ'); $my_ranking = get_field('関連A',$page->ID); if ( $my_ranking ) { $number = 1; global $wpdb; global $rateAvg; ?> <?php foreach($my_ranking as $value){ if ( $number >= 11){ break; } setup_postdata($value); ?> <?php $ID = $value->ID; $rateQuery = " SELECT AVG(meta_all.meta_value) AS avg FROM ( SELECT meta.meta_value FROM ( SELECT comment_ID, comment_post_ID FROM wp_comments WHERE comment_approved = 1 AND comment_post_ID = ".$ID." ) comment, ( SELECT comment_ID, meta_value FROM wp_commentmeta WHERE meta_value is not null ) meta WHERE comment.comment_ID = meta.comment_ID ) meta_all; "; $rateAvg = $wpdb->get_results($rateQuery); ?> <li> <a href="<?php the_permalink($value->ID); ?>"> <?php echo get_the_title($value->ID); ?> </a> <?php echo get_the_post_thumbnail($value->ID); ?> <?php $ppage = get_page_by_path( '関連Bの固定ページ' ); $site_list = get_field('関連B',$ppage->ID); $i = 1; if ( $site_list) { foreach ($site_list as $vvalue){ $ss = $vvalue -> ID; if ( $ID == $ss ) { echo $i++."位"; break; } $i++; if(!($site_list[$i])){ echo "圏外"; break; } ?> <?php } wp_reset_postdata();} ?> <!--ここに'関連A'のポストの内容を再度用いて表示する内容が入る--> <?php wp_reset_postdata(); ?> <?php $number++;}}?> </li> </ul>
元々あった内容に真ん中の「$ppage〜break;」の部分を入れ子にしている形なのが原因だとは思われるのですが、ループ処理に詳しい方のご指導お願いします。
回答1件
あなたの回答
tips
プレビュー