acfで作った投稿型5段階評の平均得点をもとに記事のランキングを作りたい。
-
プラグインを使用して記事のランキング機能を付けていたのですが、テーマとの相性が悪くて使えないことが判明したので、ACFを使用して評価&ランキング機能を作りたいと思っています。
状況:
記事ページに対し、IDで関連付けたランキング用のカスタム投稿をログインした閲覧者が5段階評価を付けてACFの機能で投稿できるようにしています。
投稿から5日経過した5段階評価の数字を集計し、投稿人数で割ったものを平均取得星数として各記事に表示するところまでできました。
集計用のコードは下記で、記載場所は被評価記事のサイドバーです。<?php date_default_timezone_set('Asia/Tokyo'); $star_post_criterion = date('Y/m/d H:i:s', strtotime('-5 day'));//公開基準日。現在の日付より5日分遡る $post_id = get_the_ID(); //被評価記事のID取得 $args = array( 'numberposts' => '-1', 'post_type' => 'star-rate' , //投稿タイプの指定 'post_status' => 'all', //すべての投稿タイプ 'meta_query' => array( array( 'key' => 'star-house-id', 'value' => $post_id, //IDで紐づけしたのを引っ張る ), array( 'key' => 'star-time-stamp', //評価投稿時のタイムスタンプ 'value' => $star_post_criterion, //基準日と比較 'compare' => '<=', //基準日以前のもの ) ), 'tax_query' => array( //スパム認定されたものは収集せず array( 'taxonomy' => 'remove-rate', 'field' => 'term_id', 'terms' => '258', 'operator' => 'NOT IN', ) ) ); $customPosts = get_posts($args); $star = ''; //reset $sum_star = ''; $people = ''; if($customPosts) : foreach($customPosts as $post) : $star[] = get_field('star-rate'); //カスタムフィールドを取得 $people++; //回転数をカウント endforeach; if($star): $sum_star = array_sum($star); endif; $ave_star = round($sum_star/$people,1); /*変数の内容*/ // $sum_star 獲得総星数 // $people 投票総人数 // $ave_star 平均星数(小数点第1位までで四捨五入) echo '平均星数:'; echo $ave_star ; endif; wp_reset_postdata(); /*クエリのリセット*/ ?>この平均星数を自動で被評価記事のカスタムフィールドに飛ばし、その値を比較してフロントページ等でget_postsを使用して上位3つの記事ランキングを作成できないかと考えています。
ただ、被評価記事のカスタムフィールドに取得数の数値を自動で記録する方法がわかりません。評価をacfで投稿するときに被評価記事のID等をカスタムフィールドに自動挿入する仕組みを応用して
<script type="text/javascript"> jQuery(document).ready(function($){ var set_value = function(input_id, input_val) { $('#' + input_id).val(input_val); } set_value('カスタムフィールドのID', "<?php echo $ave_star; ?>"); }); </script>のようにして平均評価数を上書きとかできないかなと思たのですが、これはなんか違う気がします。
どのようにすれば解決しますでしょうか?今やろうとしていることがそもそも不可能であるなら、他にランキング作成してを記事を取得する方法があれば教えていただきたいです。
2件の返信を表示中 - 1 - 2件目 (全2件中)
2件の返信を表示中 - 1 - 2件目 (全2件中)
トピック「acfで作った投稿型5段階評の平均得点をもとに記事のランキングを作りたい。」には新たに返信することはできません。