我修改了来自WordPress 论坛的查询以获得您想要的内容。这种设置的“大”优势是它只会向数据库发出一个请求。但是,这确实意味着您需要修改脚本,但我认为这没什么大不了的。
这是查询
-- selects the comment count and term (category) name
SELECT SUM(p.comment_count) AS count, t.name FROM wp_posts p
JOIN wp_term_relationships tr ON tr.object_id = p.ID
JOIN wp_term_taxonomy tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
JOIN wp_terms t ON t.term_id = tt.term_id
WHERE t.term_id in (1,2,3,4,5...)
AND p.post_status = 'publish'
GROUP BY t.term_id
这就是我在上面编写代码的方式。
<?php
global $wpdb;
$categories = get_categories(array(
'hide_empty' => 0,
'hierarchical' => 0,
'exclude' => '1' //exclude uncategorised
));
// create a comma separated string of category ids
// used for SQL `WHERE IN ()`
$category_ids = implode(',', array_map(function($cat) {
return $cat->term_id;
}, $categories));
$query = "SELECT SUM(p.comment_count) AS count, t.name FROM wp_posts p
JOIN wp_term_relationships tr ON tr.object_id = p.ID
JOIN wp_term_taxonomy tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
JOIN wp_terms t ON t.term_id = tt.term_id
WHERE t.term_id in ($category_ids)
AND p.post_status = 'publish'
GROUP BY t.term_id";
$categories = $wpdb->get_results($query);
echo '<ul>';
foreach( $categories as $category ) {
printf("<li>the %s category has %s comments</li>", $category->name, $category->count);
}
echo '</ul>';