質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

「指定タームの投稿にされたコメント」から、メタキーを取得し、順番に表示したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 673

score 17

前提・実現したいこと

「指定タームの投稿にされたコメント」について、そのメタキーを取得し、ランキングを作りたいと考えています。

最終的な出力箇所には

$tarms = array( ‘sweet, sour’ );
echo get_count_ranking( $tarms );


と書いて処理できれば理想的です。

発生している問題

それぞれの関数で何が取得されてどう利用できるのかいまいち掴めておらず、var_dumpで追いかければいい話ですが自分にはまさにそれこそが難しく、下記のソースコードで実現できない状態です。

該当のソースコード

WordPressのpage-front.phpに以下のコードを追記しました。

おおまかな流れの目的として次の3つのコメントアウトがあるように、

1: 引数($tarms)で指定するslugの投稿を取得
2: 1のコメントを取得
3: 2のmeta_key(count)を取得し、多い順にユーザーを返す

というイメージです。

※meta_keyの「count」は、データベース「wp_commentmeta」に格納されているキーです。 

function get_count_ranking( $tarms ){
    // 1: 引数($tarms)で指定するslugの投稿を取得
    $customPostArg = array(
        'posts_per_page' => 5,
        'post_type'      => 'fluits',
        'tax_query'      => array(
            array(
                'taxonomy' => 'taste-tag',
                'field'    => 'slug', 
                'terms'    => $tarms 
            )
        )
    );
    $array_with_post_ids = get_posts($customPostArg);

    // 2: 1のコメントを取得
    $args = array(
        'post__in' => $array_with_post_ids
    );
    $comments = get_comments( $args );

    // 3: 2のmeta_key(count)を取得し、多い順にユーザーを返す
    $result = '';    
    $needed_data_array = array();
    foreach ($comments as $key => $comment) {
        $ranking = get_comment_meta($comment->ID, 'count', $return_single_value = true);
        $author_id = $comment->user_id;
        if($author_id) {
            $needed_data_array[$author_id][] = $ranking; 
            $result .= '<li>'.$author_id.'</li>';
        }
    }
    return $result;
}


var_dumpすると「この関数が目的通りにいってない」とはなるのですが、「でもどうしたらいいのか」という状態です。

そんな中ですが、ひとまず実現したいことの意図が伝わればと思い、現状のソースコードとして上記を掲載させて頂きました。

間違った点や改善すべき点など多々あるかと存じますが、正しい書き方についてご教授願えましたら幸いです。どうぞ宜しくお願い申し上げます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2018/12/10 17:48

    「var_dumpすると「この関数が目的通りにいってない」とはなるのですが、「でもどうしたらいいのか」という状態です。」とのことですが、どこの処理が目的通りではないことを確認しているのかを質問文に追記してください。

    キャンセル

回答 1

checkベストアンサー

+1

改善すべき点

// $tarms = array( ‘sweet, sour’ );
//  全角が入っている ↓           ↓
   $tarms = array( 'sweet, sour' );
    $customPostArg = array(
        'posts_per_page' => 5,
        'post_type'      => 'fluits',
        'fields'      => 'ids', // post__in で使うなど、ID のみで良いならこれを指定
        'tax_query'      => array(
            array(
                'taxonomy' => 'taste-tag',
                'field'    => 'slug', 
                'terms'    => $tarms 
            )
        )
    );
    $array_with_post_ids = get_posts($customPostArg);

【WordPressのget_postsでフィールドを制限する | ハックノート】
https://hacknote.jp/archives/15482/

【WP_Query | Class | WordPress Developer Resources】
https://developer.wordpress.org/reference/classes/wp_query/#return-fields-parameter

あとは、var_dumpの結果も提示するとか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/22 11:52

    ありがとうございます。イメージがつかめました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る