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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1143閲覧

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

daijin

総合スコア17

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/08 09:38

編集2018/12/08 10:15

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

最終的な出力箇所には

php

1$tarms = array( ‘sweet, sour’ ); 2echo 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」に格納されているキーです。

php

1function get_count_ranking( $tarms ){ 2 // 1: 引数($tarms)で指定するslugの投稿を取得 3 $customPostArg = array( 4 'posts_per_page' => 5, 5 'post_type' => 'fluits', 6 'tax_query' => array( 7 array( 8 'taxonomy' => 'taste-tag', 9 'field' => 'slug', 10 'terms' => $tarms 11 ) 12 ) 13 ); 14 $array_with_post_ids = get_posts($customPostArg); 15 16 // 2: 1のコメントを取得 17 $args = array( 18 'post__in' => $array_with_post_ids 19 ); 20 $comments = get_comments( $args ); 21 22 // 3: 2のmeta_key(count)を取得し、多い順にユーザーを返す 23 $result = ''; 24 $needed_data_array = array(); 25 foreach ($comments as $key => $comment) { 26 $ranking = get_comment_meta($comment->ID, 'count', $return_single_value = true); 27 $author_id = $comment->user_id; 28 if($author_id) { 29 $needed_data_array[$author_id][] = $ranking; 30 $result .= '<li>'.$author_id.'</li>'; 31 } 32 } 33 return $result; 34} 35

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/10 08:48

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

回答1

0

ベストアンサー

改善すべき点

PHP

1// $tarms = array( ‘sweet, sour’ ); 2// 全角が入っている ↓ ↓ 3 $tarms = array( 'sweet, sour' );

PHP

1 $customPostArg = array( 2 'posts_per_page' => 5, 3 'post_type' => 'fluits', 4 'fields' => 'ids', // post__in で使うなど、ID のみで良いならこれを指定 5 'tax_query' => array( 6 array( 7 'taxonomy' => 'taste-tag', 8 'field' => 'slug', 9 'terms' => $tarms 10 ) 11 ) 12 ); 13 $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/15 18:48

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daijin

2018/12/22 02:52

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問