2020/11/27ある記事投稿サイトで記事を平均評価順でソートできるようにしてほしいという依頼があり少し苦戦しました。Reviewsというプラグインを使用して投稿に対してユーザが星マークをつけてレビューをしてもらい、平均評価を表示するところまではできていたのですが、この平均評価というものがmeta_keyとしてDBに保持されてるわけではなかったからです(平均値はクエリで投稿IDに紐づいている評価数を取得して算出していました)。ソート実行時に、『WPクエリを投げて取得したものに対して並び替えをかけるみたいなことをしてみたのですが、このやり方ではページネーションの壁にぶつかりました。(1ページ目だけを並び替えてしまうのです)これは平均評価をmeta_keyとして持たせるしかないと思い少しプラグインをいじってみることにしました。意外と少ない記述で実現できました。Reviewsプラグインの導入は済んでいるという前提で進めさせていただきます。Reviewsを編集する4記事登録時に平均評価を0で登録するようにfunctions.phpを変更5平均評価でソートをする1wp-customer-reviews-3.phpを開きますこのファイルはwp-content/plugins/wp-customer-reviewsの中にあります。2評価ボタンクリック時に実行されているプログラムを見つけますレビュー投稿時に平均評価を登録するということをしたいので、プログラムが実行されてる場所を見つける必要があります。いう関数が実行されているようです。1004~1009行目を見るとどうやらレビューに関する情報がDBに登録されているのがわかります。この後に記述を追加して平均評価もDBに登録してやるように改造しましょう。Reviewsを編集する上記の1004~1009行目の後に以下のように記述します。//平均評価を登録5~7行目でクエリを投げて投稿に紐づくレビューから平均評価を算出し8行目で平均評価を登録しています。4記事登録時に平均評価を0で登録するようにfunctions.phpを変更meta_keyがないと取得時に記事をそもそも取得しなくなってしまうので、functions.phpを編集して記事登録時に平均評価を0として持たせます。場所はどこでもいいと思います。}}add_action('save_post','set_default_reviewAvg_metakey');2行目で関数を定義し、3、4行目で投稿IDに紐づく記事にwpcr3_review_avgというmeta_keyが存在するか確認し、もしなければ5行目で平均評価を0として登録し、9行目は2行目で定義した関数を記事登録(save_post)時に実行するように設定しています。平均評価でソートする準備が整いました。5平均評価でソートをするそれでは先ほど作成したwpcr3_review_avgをmeta_keyとしてソートしてみます。(もちろんいくつかのレビューをした後で)ソートするには以下のように記述します。WP_Query($args);これで評価の高い順に記事が並んだのではないでしょうか。今回のやり方ではプラグインを直接編集しているのでプラグインを更新すると3で書いた記述が上書きされて消えてしまうので、更新しないようにするか更新した場合はもう一3の部分の記述を加えてやる必要があります。Reviewsを使って平均評価ソートをできるようにする方法でした。Posts関連記事は見つかりませんでした。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。views2021/1/202023/5/13タイトルとURLをコピーしました。