カスタム投稿タイプ(製品)があり、カスタム番号フィールド(評価)が含まれています。カテゴリ(メーカー)ページで、これらの評価を平均して、メーカーの総合評価を出したい。
だから私は単一の値を返す関数を構築しようとしています:
- このカテゴリに分類されているカスタム投稿内で見つかったすべての空でない評価フィールドの平均値を取得します
- ループとは独立して実行されます(ループの前に表示する必要があり、ループで使用されているよりも多くの投稿がある場合があります)
これに取り組む方法はありますか?
メーカーページに適用するカスタムテンプレートを作成します。メインループとは別に、WP_Queryを使用してセカンダリループを作成します。次に、カスタム投稿タイプを実行し、それらが存在する場所で評価を累積します。平均を計算するためのカウンターを設定します。次にwp_reset_query()
、必要に応じてを使用してループをリセットします。
以下のコードはテストしていませんが(明らかに、すべてを設定するつもりはありません)、目的の結果を得るためにコードを微調整/デバッグできるという十分なアイデアが得られるはずです。
この例では、カスタム投稿タイプ4内に架空のカテゴリIDを作成しました。これは、設定に変更できます。
<?php
$counter = 0;
$cumulative_value = 0;
$avg_query = new WP_Query(array('post_type' => 'product', 'posts_per_page' => '-1', 'cat' => '4' ));
if ( $avg_query->have_posts() ) :
while ($avg_query->have_posts()) : $avg_query->the_post();
if ( $rating_value = get_post_meta($post->ID, 'rating', true) ) :
$cumulative_value += $rating_value;
$counter++;
endif;
endwhile;
endif;
$avg_value = $cumulative_value/$counter;
wp_reset_query(); ?>