2

Wordpress で特定のカテゴリのコメントの総数を取得する方法を見つけようとしています。公式ドキュメントと関数リファレンスを読みましたが、成功しませんでした。しかし、以下のコードを思いつきましたが、残念ながら、$termid を 1 つだけ選択し (つまり、最初のカテゴリの最初の 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);
?>
4

1 に答える 1

2

WordPress フォーラムのクエリを変更して、必要なものを取得しました。このセットアップの「大きな」利点は、データベースに対して 1 つの要求しか行わないことです。ただし、スクリプトを変更する必要があることを意味しますが、それは大したことではないと思います。

ここにクエリがあります

-- 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>';
于 2012-09-10T00:56:03.303 に答える