Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取wordpress类别中的评论总数_Php_Mysql_Wordpress - Fatal编程技术网

Php 获取wordpress类别中的评论总数

Php 获取wordpress类别中的评论总数,php,mysql,wordpress,Php,Mysql,Wordpress,我正试图在Wordpress中找到一种方法来获取特定类别中的评论总数。我已经阅读了官方文档和函数参考,但没有成功。然而,我想出了下面的代码,但不幸的是,它只选择了一个$termid(即它选择第一个类别的第一个termid),并在所有类别中显示结果。请帮忙 <?php $categories = get_categories( array( 'hide_empty' => 0, 'hierarchical' => 0, 'exclude' =>

我正试图在Wordpress中找到一种方法来获取特定类别中的评论总数。我已经阅读了官方文档和函数参考,但没有成功。然而,我想出了下面的代码,但不幸的是,它只选择了一个$termid(即它选择第一个类别的第一个termid),并在所有类别中显示结果。请帮忙

<?php
  $categories = get_categories( array(
    'hide_empty'   => 0,
    'hierarchical' => 0,
    'exclude' => '1' //exclude uncategorised
  ));
 foreach($categories as $category): ?>   
 global $wpdb;

 $catid = $category->cat_ID;
 $catname = $category->name;

$count = "SELECT COUNT(*) FROM $wpdb->comments, $wpdb->terms WHERE term_id=$category->term_id";
    $result = $wpdb->get_var($count);
?>

全球$wpdb;
$catid=$category->cat_ID;
$catname=$category->name;
$count=“从$wpdb->comments,$wpdb->terms中选择count(*),其中term\u id=$category->term\u id”;
$result=$wpdb->get_var($count);
?>

我修改了来自的查询以获得所需内容。这种设置的“大”优点是它只向数据库发出一个请求。然而,这确实意味着你需要修改你的脚本,但我不认为这是一个大问题

这是问题

-- 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>';

工作起来很有魅力!起初,我担心评论数量不对,但意识到这是wordpress的问题。非常感谢。