1

WP_Query について質問があります。カスタムフィールドを持つカスタム投稿タイプに多数の投稿があるとします。これらのカスタム フィールドの一部は、番地、都市、州などの住所情報です。私がやりたいことは、すべての状態のリストと、各状態にある投稿の数を表示することです。

州ごとの結果数を取得することに成功しましたが、州のリストが複数表示されています。WV に 3 つのレコードがある場合、WV が 3 回表示されます。それは各州で一貫しています。

「GROUP BY」のようなことをしようとしていますが、うまくいきません。

混乱の原因の一部は、住所を保持しているカスタム フィールドであるため、州ごとにグループ化する方法がわかりません。

これが私のコードです:

$stateqry = array( 
'post_type' => 'plf', 
'posts_per_page' => -1,
'orderby' => 'meta_value',
'meta_key' => 'state',
'order' => 'DESC',
'status' => 'published'
);

$loop = new WP_Query( $stateqry );
while ( $loop->have_posts() ) : $loop->the_post();

 $firmName = get_the_title($post->ID);
 $profileLink = get_permalink($post->ID);
 $custom = get_post_custom($post->ID);
 $addressLine1 = $custom["addressLine1"][0];
 $addressLine2 = $custom["addressLine2"][0];
 $city = $custom["city"][0];
 $state = $custom["state"][0];

// get the PLF count by state
$getPLFs = $wpdb->get_results("SELECT * FROM $wpdb->postmeta 
WHERE meta_key = 'state' AND meta_value = '$state' 
GROUP BY meta_value" );

次に、foreach を実行しようとしています。

<?php foreach($getPLFs as $plf) { 
    $state_count = $wpdb->get_var("SELECT COUNT( meta_value ) FROM $wpdb->postmeta WHERE meta_key = 'state' AND meta_value = '$state' " );
?>
<div class="statebox <?php echo $state; ?>">
    <h1><?php echo $state; ?>: <?php echo $state_count; ?></h1>
</div>
<?php } ?>
<?php endwhile; wp_reset_query(); ?>

クエリを修正して州をグループ化し、各州の投稿数を表示する方法について誰か提案がありますか?

4

1 に答える 1

4

他のすべての詳細が必要でない限り、WP_Queryまたはループをまったく使用せずに、単一のクエリでこれを行います。次のようなものです(現在テストシステムにアクセスできないため、これはテストされていません):

$plfsByState = $wpdb->get_results("
  select pm.meta_value as state
       , count(*) as postcount
    from $wpdb->posts p
         join $wpdb->postmeta pm on p.ID = pm.post_id
   where p.post_type = 'plf'
     and p.post_status = 'publish'
     and pm.meta_key = 'state'
group by pm.meta_value
order by pm.meta_value DESC" );

次に、結果をループするだけです(これもテストされていません):

<?php foreach($plfsByState as $plf) { ?>
<div class="statebox <?php echo $plf->state; ?>">
    <h1><?php echo $plf->state; ?>: <?php echo $plf->postcount; ?></h1>
</div>
<?php } ?>
于 2013-10-26T06:11:55.310 に答える