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

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

ただいまの
回答率

90.75%

  • PHP

    19211questions

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

  • WordPress

    6670questions

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

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

受付中

回答 1

投稿

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

happysmile

score 2

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

現在、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

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • m6u

    2018/06/15 12:38

    https://wordpress.org/support/plugin/reviews-plus で問い合わせるとか過去ログを調べるなどしていますか?

    キャンセル

  • happysmile

    2018/06/15 12:56

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

    キャンセル

回答 1

0

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

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

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

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/06/15 17:10

    ご回答ありがとう御座います。
    仰られている通り、
    1.平均値を特定のカスタムフィールドへ格納する

    これに関しては、
    function ic_get_reviews_average( $product_id ) {



    }
    で平均値を処理したあとにデータベースへ格納する処理を書く(コメント投稿と紐づいているので新たなコメント投稿(評価)があった場合に値を更新する処理)で理論上は出来るのではないかと思っています。

    2に関しても、カスタムフィールドの値でソートする事になるので、1の処理でデータベースへと格納されているのであれば、meta_valueもしくはmeta_value_numを使ってソート出来ると思っています。
    すでに別のmeta_valueやmeta_value_numを使ってソートする機能は実装しています。

    やはり、現状のプラグインに平均値を格納・更新するコードを書き足しただけでは実装できないものでしょうか。

    有料で作って頂けば簡単に解決してしまうとは思うのですが、自分の技術向上の為に勉強をしたいと思っているので、お金を出して結果だけ買うという行為は避けたいと思っています。
    クライアントさんがいて、仕事としてやっているのであれば、そうも言ってられないのですが、これを実装する為には、こういうコードを書くとこうなってこうなる、という事を自身で理解できないと自分のためにならないと思って一つずつ勉強しています。

    キャンセル

  • 2018/06/15 17:57

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

    キャンセル

  • 2018/06/15 19:14

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

    キャンセル

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

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

関連した質問

  • 解決済

    これ教えて

    08.以下の条件を実現するプログラムを作成せよ。 ・ファイル名は『MP08.java』とする。 ・int型2次元配列Tenを定義し Ten = {{70, 40, 90},

  • 解決済

    PHPとajaxによる検索について

    検索機能の作り方で困ったので質問させていただきます。 現在、PHPとMySQLとajaxで検索機能を作っています。 仕様としましては、リアルタイムに検索結果を出したかっ

  • 解決済

    構造体のプログラム

    いつもお世話になっています。C言語初心者でただいま勉強中です。構造体について質問させていただきます。ファイルから構造体配列に読み込んで以下のように出力するプログラムを作りたいんです

  • 解決済

    配列

    n個のデータを配列に読み込み、平均と分散を求めるプログラムを作成して、下記のデータで試せ、という問題です。 {3.9,10.4,9.5,7.5,2.8,4.8,2.9,8.1,3

  • 解決済

    JavaScript【要素が画面に表示されたときに動きを発動させたい】

    JavaScript初心者です。 ご回答いただけますと幸いです。 【前提】 ―――――――――――――――――――――――――――――――――――――――― 「Char

  • 解決済

    sqlに関してです、

    SUM(CASE WHEN test>=0 && test<=100000 THEN test  ELSE 0 END) AS total, SUM(CASE WHEN test>

  • 解決済

    プログラミング言語 テスト

    include <stdio.h> main(){ int data[10]; double ave;//平均点 int max, min, n, i =0;//nはデータ数に使用

  • 解決済

    java 配列を別クラスで受け取る方法

    キーボードから入力したテストの結果から、合計・平均・順位(バブルソート)分散・標準偏差を導出するプログラムを作っています。 具体的には 生徒数を入力 ↓ 生徒数の応じた点数を入力

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

  • PHP

    19211questions

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

  • WordPress

    6670questions

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