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

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

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

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

PHP

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

Q&A

1回答

2514閲覧

ワードプレスでの口コミ機能の実装(平均評価値のソート)について

happysmile

総合スコア6

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/06/15 03:27

????ワードプレスでの口コミサイトの構築

現在、CMS(ワードプレス)をベースに口コミサイトの構築を勉強しています。
口コミサイトの構築のため、“Reviews Plus"というプラグインを導入し、利用しています。

プラグインのfunction.php内のソースコードをみて、星評価の平均値をechoで呼び出しする事はできたのですが、平均値についてはデータベースへは保存される仕組みになっていないようです。

プラグインではPOST IDに紐づいた口コミ評価の投稿数と、ic_reviewsの値をfunction.php内で計算して表示しているようです。

口コミの平均値が高い順や、低い順で投稿のアーカイブページでソートする事を考えると、平均値を数値としてデータベースに格納し、それを呼び出す形で処理するのだと思うのですが、知識が浅いのでここで躓いてしまっています。

お分かりになる方がおりましたら、お力添えいただけると幸いです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

おそらく該当する箇所であろうコードを抜粋しました。 ↓ function ic_get_reviews_average( $product_id ) { $totals = ic_get_product_review_totals( $product_id ); $total_summary = $totals[ 'total' ]; if ( !empty( $total_summary ) ) { unset( $totals[ 'total' ] ); unset( $totals[ 0 ] ); krsort( $totals ); $total_achieved = 0; foreach ( $totals as $key => $total ) { $total_achieved += $key * $total; } $max = $total_summary * 5; $total_score = number_format( ($total_achieved / $max) * 5, 1 ); return $total_score; } return 0; } function ic_get_review_totals_html( $product_id ) { $totals = ic_get_product_review_totals( $product_id ); $html = '<div class="review-totals">'; $total_summary = $totals[ 'total' ]; unset( $totals[ 'total' ] ); unset( $totals[ 0 ] ); krsort( $totals ); $total_achieved = 0; $reviews_break = '<div class="reviews-break">'; foreach ( $totals as $key => $total ) { $stars_label = ic_get_stars_label( $key ); $reviews_break .= '<div class="review-total-' . $key . ' review-total-row"><div class="stars-count">' . $stars_label . '</div> ' . ic_stars_qty_graph( $total, $total_summary ) . ' <div class="row-total">' . $total . '</div></div>'; $total_achieved += $key * $total; } $reviews_break .= '</div>'; $html .= '<div class="reviews-summary"><span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">'; $html .= '<meta itemprop="itemReviewed" content="' . get_the_title( $product_id ) . '">'; if ( !empty( $total_summary ) ) { $max = $total_summary * 5; $total_score = number_format( ($total_achieved / $max) * 5, 1 ); $html .= sprintf( __( 'Average Rating: <strong>%s out of %s</strong> (%s votes)', 'reviews-plus' ), '<span itemprop="ratingValue">' . $total_score . '</span>', '<span itemprop="bestRating">5</span>', '<span itemprop="ratingCount">' . $total_summary . '</span>' ); } $html .= '</span></div>'; $html .= $reviews_break; $html .= '</div>'; return $html; } ーーーーーーーーーーーーーーーーーーーーー <?php echo ic_get_reviews_average($post->ID); ?> これをフロントのphpで読み出すと、平均評価は数値として値で出てきます。

試したこと

参考書やWEBを調べて一通り試してみたのですが、やはり良い結果が出ず、1ヶ月ほど先に進めていません。
知識が足らず、お恥ずかしい限りです。

補足情報(FW/ツールのバージョンなど)

WordPress 4.9.6

ここにより詳細な情報を記載してください。

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

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

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

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

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

happysmile

2018/06/15 03:56

はい。プラグインのフォーラムは一通り検索をしましたが、一番近いものですとサポートしていませんという回答がありました。また英語力が低いのでフォーラムでの質問はできておりません。またteratail内も検索しましたが、別のプラグインについては記載がありましたが、当該のプラグインを利用しての例は見つけられませんでした。一通りグーグルも検索をしたのですが、そちらも該当が見つからずの状態です。すみません。
guest

回答1

0

このプラグイン云々という話ではなく、処理のアイディアとして。

1.平均値を特定のカスタムフィールドへ格納する

2.カスタムフィールドの値でソートされた一覧を表示する

超簡単に書いてしまっていますけど、計算されたデータを投稿IDに紐づいたどこかへ・・・でその順位を表示するというのであればこんな段取りではないかと思われますが・・・。

プラグインの機能をカスタマイズというものではなく、サイト制作の案件となるかと思いますので調べて解決できなければ有料でも誰かにお願いするしかないと思いますよ。

投稿2018/06/15 05:58

momosiri

総合スコア1509

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

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

happysmile

2018/06/15 08:10

ご回答ありがとう御座います。 仰られている通り、 1.平均値を特定のカスタムフィールドへ格納する これに関しては、 function ic_get_reviews_average( $product_id ) { … … … } で平均値を処理したあとにデータベースへ格納する処理を書く(コメント投稿と紐づいているので新たなコメント投稿(評価)があった場合に値を更新する処理)で理論上は出来るのではないかと思っています。 2に関しても、カスタムフィールドの値でソートする事になるので、1の処理でデータベースへと格納されているのであれば、meta_valueもしくはmeta_value_numを使ってソート出来ると思っています。 すでに別のmeta_valueやmeta_value_numを使ってソートする機能は実装しています。 やはり、現状のプラグインに平均値を格納・更新するコードを書き足しただけでは実装できないものでしょうか。 有料で作って頂けば簡単に解決してしまうとは思うのですが、自分の技術向上の為に勉強をしたいと思っているので、お金を出して結果だけ買うという行為は避けたいと思っています。 クライアントさんがいて、仕事としてやっているのであれば、そうも言ってられないのですが、これを実装する為には、こういうコードを書くとこうなってこうなる、という事を自身で理解できないと自分のためにならないと思って一つずつ勉強しています。
momosiri

2018/06/15 08:57

恐らくここでこのコードを・・・という回答は得られないと思いますよ、多分。仰るように業者が手組する案件だと思いますので。もしも回答を得るとすれば自身で書いたソースでエラーが出たものを「ここがうまくいかない」とした方がいいかと思います。
happysmile

2018/06/15 10:14

回答ありがとう御座います。 色々試してはみていますが、ソースコードも踏まえ根本がきちんと理解できていないと難しいという事がわかりました。 とにかく買ってしまったら、結局内容がわからないまま勉強になりませんので、どこかこう言った内容を学べるスクール等を探してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問