サポート » テーマ » コメント順ランキングを特定のカテゴリ限定にする方法について

  • いくら調べても分からなかったので知恵をお借りできればと思い投稿させてもらいます。

    <やりたいこと>
    1:コメント順のランキングを表示
    2:コメント数も横に表示
    3:1週間と区切って集計
    4:特定のカテゴリーに限定

    <やったこと
    以下のコードにて 1,2はできました。

    <?php $result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts
    WHERE post_type = 'post' ORDER BY comment_count DESC LIMIT 0 , 5");
      foreach ($result as $post) {
        setup_postdata($post);
        $postid = $post->ID;
        $title = $post->post_title;
        $commentcount = $post->comment_count;
        if ($commentcount != 0) { ?>
          <li>
            <a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>">
            <?php echo $title ?><span class="comments_number">(<?php comments_number('0', '1', '%' ); ?>)</span></a>
          </li>
    <?php } } ?>

    ただ3,4の指定がどうしてもできません。おそらくSQL文で記載すると思われますが、やっとSQLの勉強に突入した程度で中々前に進めません。
    どなたかご教授頂けないでしょーか?

    宜しくお願いします!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    T-maさん、こんにちは。

    「特定のカテゴリーに限定」であれば、query_postsのパラメータなどでも指定できるのですが、「1週間と区切って集計」というのが難物ですね。postsテーブルに格納されているコメント数は当然ながら、それぞれの記事の総数なので期間を指定することはできません。

    ではどうするかというと、私なら、commentsテーブルに対してクエリーを発行し、期間内の総緒コメントを取得。得られた投稿のIDをphpで配列に再集計して、ソート、表示という流れにします。

    この場合に、特定のカテゴリーに絞るのは、inner joinでテーブルを連結し、コメントの取得段階で絞り込んでおく方が便利です。カテゴリーで絞り込むためには、comments – posts – term_relationships – term_taxonomy – terms とかなりの連結が必要になりますが、wp-includes/query.php で $this->request を dump して参考にしてみてください。

    その他、comment_approved や post_type, post_status などいくつか指定すべき条件があります。WordPressのデータベース構造とデータの格納方法などはしっかり理解しておきましょう。

    トピック投稿者 T-ma

    (@t-ma)

    jim912さん

    早速のご返信ありがとうございます!

    ではどうするかというと、私なら、commentsテーブルに対してクエリーを発行し、期間内の総緒コメントを取得。得られた投稿のIDをphpで配列に再集計して、ソート、表示という流れにします。
    この場合に、特定のカテゴリーに絞るのは、inner joinでテーブルを連結し、コメントの取得段階で絞り込んでおく方が便利です。カテゴリーで絞り込むためには、comments – posts – term_relationships – term_taxonomy – terms とかなりの連結が必要になりますが、wp-includes/query.php で $this->request を dump して参考にしてみてください。

    こちらはこちらで上記ご指示頂いた内容を解読しながらやってみたいと思います。
    期間内コメント数取得 > IDをPHPで配列集計 > ソート&表示 ですね。

    4のカテゴリに分けるのはそんなに難しくないんですね。。。ヒヨっ子以下の僕には結構時間使ってしまっております。。。最悪,3のみのカテゴリ分けでもできればとは思っております。これだけでもご指示頂けると助かります。。。

    宜しくお願い致します!

    モデレーター jim912

    (@jim912)

    T-maさん

    get_postsで良いなら

    $result = get_posts(
    	array(
    		'posts_per_page' => 5,
    		'orderby' => 'comment_count'
    		'cat' => array( n )
    	)
    );

    'cat' => array( n )のnはカテゴリーのID

    あたりで取れると思います。catは指定したカテゴリーの子カテゴリーも含めてしまうので、指定したカテゴリーだけに限りたい場合は、category__inパラメータを利用すれば良いです。

    詳しいパラメータについては、query_postsget_postsのパラメータを参照してください。多少差違がありますが、多少デフォルトの設定値がことなる程度で、使えるパラメータは同一です。

    トピック投稿者 T-ma

    (@t-ma)

    jim912 さん

    さっそくのご教授ありがとうございます!

    おかげでカテゴリ分けに関して見事表示できました!
    あとは期間集計の方も頑張ってみます。

    ひとまずはお礼まで!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「コメント順ランキングを特定のカテゴリ限定にする方法について」には新たに返信することはできません。