web-dev-qa-db-ja.com

カスタム投稿タイプのすべてのコメントを数える

私は、投稿、ユーザー、そして合計でコメントを数える方法を知っていますが、私は
特定の投稿タイプに投稿されたコメントの合計数に問題があります。

私は私がすべての記事を通してループし、それぞれを数えることができると思います
コメントしかし私はもっと早く、より少ないものを探しています
リソースが高い

あなたの助けに感謝

これまでのところこれを得ました(これは悪い方法だと思いますが、私は間違っているかもしれません):

/*** ALL COMMENTS COUNT BY POST TYPE ***/
function countCptCommentsTotal() {

    // FAQ ARGS
    $faqStatsArgs = array(
        'post_type'         =>  'some_post_type',
        'post_status'       =>  'publish',
        'posts_per_page'    =>  -1
    );
    $faqstats_query = new WP_Query($faqStatsArgs);

    // THE LOOP
    $allAnswers = 0;
    while ($faqstats_query->have_posts()) {
        $faqstats_query->the_post();

        $curfaqid       =   get_the_ID();
        $allAnswers =   $allAnswers + countPostComments($curfaqid);

    }

    wp_reset_query();
    return $allAnswers;
}
1
Sagive SEO

最初にあなたのカスタム投稿タイプexのすべての投稿IDを取得するための単純なサブクエリを持つ直接SQLについてはどうでしょうか。

function get_all_comments_of_post_type($post_type){
  global $wpdb;
  $cc = $wpdb->get_var("SELECT COUNT(comment_ID)
    FROM $wpdb->comments
    WHERE comment_post_ID in (
      SELECT ID 
      FROM $wpdb->posts 
      WHERE post_type = '$post_type' 
      AND post_status = 'publish')
    AND comment_approved = '1'
  ");
  return $cc;
}

使用法:

$total_comments =  get_all_comments_of_post_type('some_post_type');
1
Bainternet

単にcomment_count行をsumsする単純なMySQLクエリを実行するだけです。例として次のプラグイン:

<?php
namespace WPSE;

/**
 * Plugin Name: (#134338) Get total Comment Count
 * Plugin URl:  http://wordpress.stackexchange.com/q/134338
 */

defined( 'ABSPATH' ) or exit;

function commentCountTotal( $postType = 'post' )
{
    global $wpdb;
    return $wpdb->query( $wpdb->prepare(
        "SELECT sum( comment_count )
        FROM (
            SELECT comment_count
            FROM {$wpdb->posts}
            WHERE post_type = '%s'
            AND post_status = 'publish'
            AND comment_count > 0
            LIMIT 0 , 999
        ) as count",
        $postType
    ) );
}

それを呼び出すだけで、この投稿タイプの合計金額を表示できます。

echo \WSPE\commentCountTotal( 'your-post-type' );
1
kaiser