<?php if ( have_posts() ) : ?>
<div>
<?php while ( have_posts() ) : the_post(); ?>
<?php $serviceName = get_the_title(); echo $serviceName; ?>
<?php
$meta_query = array(
'relation' => 'OR',
);
foreach( $areaA as $item ){
$meta_query[] = array(
'relation' => 'AND',
array(
'key' => 'area',
'value' => $item,
'compare' => 'LIKE',
),
array(
'value' => $serviceName,
'compare' => 'LIKE',
)
);
}
$sub_query = new WP_Query(array(
'post_type' => 'office',
'posts_per_page' => -1,
'meta_query' => $meta_query,
));
?>
<?php if($sub_query->have_posts()): ?>
<ul>
<?php while ($sub_query->have_posts()) : $sub_query->the_post(); ?>
<li><?php the_title(); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php endwhile; ?>
</div>
<?php endif; ?>
このようなコードではエラーが出てしまい、画面が表示されないです。
また、処理に時間がかかりすぎているようにも思います。
現在は
<?php if ( have_posts() ) : ?>
<div class="potTtl" style="padding:20px;margin:20px;border:2px solid #666;">
<?php while ( have_posts() ) : the_post(); ?>
<?php $serviceName = get_the_title(); echo $serviceName; ?>
<?php
$meta_query = array(
'relation' => 'OR',
);
foreach( $areaA as $item ){
$meta_query[] = array(
'key' => 'area',
'value' => $item,
'compare' => 'LIKE',
);
}
$sub_query = new WP_Query(array(
'post_type' => 'office',
'posts_per_page' => -1,
'meta_query' => $meta_query,
));
?>
<?php if($sub_query->have_posts()): ?>
<ul>
<?php while ($sub_query->have_posts()) : $sub_query->the_post(); ?>
<?php
$service01 = implode(',',get_field('service01'));
$service02 = implode(',',get_field('service02'));
$service03 = implode(',',get_field('service03'));
$service04 = implode(',',get_field('service04'));
$service05 = implode(',',get_field('service05'));
$service06 = implode(',',get_field('service06'));
$serviceA = $service01.$service02.$service03.$service04.$service05.$service06; ?>
<?php if (strstr($serviceA, $serviceName)) { ?>
<li><?php the_title(); ?></li>
<?php } ?>
<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php endwhile; ?>
</div>
<?php endif; ?>
このようにして対応しているのですが、カスタムフィールド「$service01から$service06」のどれかに親ループのタイトルが一致していて、エリアの複数検索をしてる感じです。
全部を読んでいませんが、
array(
'value' => $serviceName,
'compare' => 'LIKE',
)
のキーが抜けているように思います。
それで、どのようなエラーが出ているのでしょうか?
エラーに関しては
2分ほど読み込みを行なったのち、
ERR_EMPTY_RESPONSEと表示されます。
現在は
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<div class="potTtl" style="padding:20px;margin:20px;border:2px solid #666;">
<?php $serviceName = get_the_title(); echo $serviceName; ?>
<?php
$meta_query = array(
'relation' => 'OR',
);
foreach( $areaA as $item ){
$meta_query[] = array(
'relation' => 'AND',
array(
'key' => 'area',
'value' => $item,
'compare' => 'LIKE',
),
array(
'value' => $serviceName,
'compare' => 'LIKE',
)
);
}
$sub_query = new WP_Query(array(
'post_type' => 'office',
'posts_per_page' => -1,
'meta_query' => $meta_query,
));
?>
<?php if($sub_query->have_posts()): ?>
<ul>
<?php while ($sub_query->have_posts()) : $sub_query->the_post(); ?>
<?php
$service01 = implode(',',get_field('service01'));
$service02 = implode(',',get_field('service02'));
$service03 = implode(',',get_field('service03'));
$service04 = implode(',',get_field('service04'));
$service05 = implode(',',get_field('service05'));
$service06 = implode(',',get_field('service06'));
$serviceA = $service01.$service02.$service03.$service04.$service05.$service06; ?>
<?php if (strstr($serviceA, $serviceName)) { ?>
<li><?php the_title(); ?></li>
<?php } ?>
<?php endwhile; ?>
</ul>
<?php endif; ?>
</div>
<?php endwhile; ?>
<?php endif; ?>
こちらで対応できているのですが、カスタムフィールド「$service01から$service06」のどれかに親ループのタイトルが一致していて、エリア(複数選択可・その中のいづれかが一致する)でも検索できるようにしたい感じです。
上記コードだと、無駄な処理が多く含まれるので、あまりよくはないのかなと思っています。
また、
http://wood-roots.com/web/wordpress/304
上記のような記事も見かけるので、検索項目が多いと処理が重すぎるのかなぁと言う気もしますが。。。