我对WP_Query有疑问。假设您在自定义字段中包含自定义字段的大量帖子。其中一些自定义字段是地址信息,如街道地址,城市和州。我想要做的是显示所有州的列表以及每个州的帖子数量。
我已经成功获得了每个州的结果数量,但我看到了该州的多个列表。如果在WV中有3条记录,我看到WV列出了三次。这对每个州都是一致的。
我试图做一些像“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(); ?>
任何人都有一些关于如何修复我的查询以将状态分组在一起并显示每个州的帖子数量的建议?
答案 0 :(得分:3)
除非你需要所有其他细节,否则我会在一个查询中执行此操作,而不是使用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 } ?>