WordPressでループを入れ子にしたら重くなってしまい困っています。
改善策をアドバイスしていただけると嬉しいです。
現行のコードを以下は以下のような感じです。
php
1<?php 2$j=get_query_var('j'); 3$taxonomy_name = 'area'; 4$term_id = get_queried_object_id(); 5$args = array( 6 'post_type' => 'jimusho', 7 'posts_per_page' => -1, 8 'tax_query' => array( 9 array( 10 'taxonomy' => $taxonomy_name, 11 'terms' => $term_id, 12 ), 13 ), 14); 15if($j==="1"){$args['meta_query']=array(array('key'=>'j','value'=>'1'));} 16$custom_query = new WP_Query( $args ); 17if ( $custom_query->have_posts() ) : 18$jimusho="<ul>"; 19 while ( $custom_query->have_posts() ) : 20 $custom_query->the_post(); 21 $address = get_post_meta(get_the_ID(), 'address'); 22 $title=get_the_title(); 23$link=get_the_permalink(); 24$j2=[]; 25$count_b=0; 26$args2 = array( 27 'post_type' => 'b', 28 'meta_key' => 'jimusho', 29 'meta_value' => get_the_ID(), 30 ); 31 $customPosts = get_posts($args2); 32 if ($customPosts) : foreach ($customPosts as $post) : setup_postdata($post); 33$j2[]=get_post_meta(get_the_ID(),'toriatukai'); 34endforeach; 35$count_b=count($customPosts);/ 36else : ?> 37 <p>記事はありません。</p> 38 <?php endif; 39 wp_reset_postdata(); 40$jimusho.="<li><a href='$link'>{$title}({$count_b}名)</a> {$address[0]}</li>\n"; 41$the_term=get_the_terms(get_the_ID(),$taxonomy_name)[0]->term_id; 42if(!isset($count[$the_term])){$count[$the_term]=0;} 43if(isset($j2)){ 44$j2=array_column($j2,0); 45 if(in_array('juu',$j2)){ 46 $jimusho.='この問題を重点的に取り扱っている専門家が所属しています。'; 47 $count[$the_term]++; 48 } 49} 50endwhile; 51$jimusho.="</ul>"; 52wp_reset_postdata(); 53else : 54$jimusho='データがありません。'; 55endif;
「jimusho」は1万6千件ほど、「b」は4万件ほどのレコードがあります。
以下の箇所が処理の時間がかかっているようです。
php
1 $customPosts = get_posts($args2);
回答2件
あなたの回答
tips
プレビュー