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 回答