サポート » 使い方全般 » 複数の投稿からカスタムフィールド内の数字を拾ってきて合算したい

  • 解決済 d.w.c

    (@dwc-1)


    読者が5つ星のレート機能を付けられるプラグインが自サイトと相性が悪かったので、ACFで自作できないか試しています。
    カスタム投稿とカスタムフィールドを使用してメインの投稿記事に紐づけたレビュー投稿自体はできるようになりましたが、星の平均数の計算がうまくいきません。

    各レビューの星の数を羅列したものは下記のコードで拾ってこれましたが、拾ってきた数字を合計するなどの計算ができずに困っています。
    下記phpを記述しているのはレビューが紐づけされている記事ページです。

    <?php /*関連付けられたレビューの全数字を表示*/
    $post_id = get_the_ID();               //母体となる投稿の投稿者ID取得
    $args = array(
    	'numberposts' => '-1',
    	'post_type' => 'star-rate' ,   //投稿タイプの指定
    	'post_status' => 'all',        //すべての投稿タイプ
    	'meta_key' => 'star-post-id',
    	'meta_value' => $post_id       //IDで紐づけしたのを引っ張る
    	);
    
    $customPosts = get_posts($args);
    if($customPosts) :
    	foreach($customPosts as $post) : 
    	setup_postdata( $post );
    	$star = get_field('star-rate'); ?>
    		<?php echo $star; ?>,
    	<?php endforeach;
    endif;
    wp_reset_postdata(); /*クエリのリセット*/ ?>

    これで 3,5,5,2, のように評価した星の数の羅列ができましたが、ここで得られた数字をarray_sumにはめ込んでで合計しようとしてもうまくはまりません。
    そもそもget_posts以外にやり方がありそうなのですが、見つけられませんでした。

    この説明でうまく伝わっているのは不安なのですが、
    複数のカスタム投稿からカスタムフィールド内の数字を拾ってきて合算する方法は何かないでしょうか?

    • このトピックはd.w.cが7年、 5ヶ月前に変更しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • d.w.cさん
    foreach内の値を[]でくくると、ループ外に引き継げますよ。

    
    
    <?php /*関連付けられたレビューの全数字を表示*/
    
    $post_id = get_the_ID();//母体となる投稿の投稿者ID取得
    $args = array(
    	'numberposts' => '-1',
    	'post_type' => 'star-rate' ,   //投稿タイプの指定
    	'post_status' => 'all',        //すべての投稿タイプ
    	'meta_key' => 'star-house-id',
    	'meta_value' => $post_id       //IDで紐づけしたのを引っ張る
    );
    
    $customPosts = get_posts($args);
    
      $star = '';//reset
      $sum_star = '';
    
    if($customPosts) :
      foreach($customPosts as $post) : setup_postdata( $post );
    
      $star[] = get_field('star-rate');//カスタムフィールドを取得 ※数値型にしてください
    
      endforeach;
    
      if($star): $sum_star = array_sum($star); endif;
    
      echo $sum_star;//計算した値を表示
    
    endif;
    
    wp_reset_postdata();/*クエリのリセット*/
    ?>
    

    試していないので、間違っていたらすみません。
    array_sumの部分は、関数調べてないので、PHPリファレンスを確認してください

    トピック投稿者 d.w.c

    (@dwc-1)

    mura0403さんありがとうございます!
    そのまま使わせていただいて解決できました!!

    一応平均数の取得までの式を記録のために残しておきます。

    <?php /*関連付けられたレビューの全数字を取得&計算*/
    $post_id = get_the_ID();               //母体となる投稿の投稿者ID取得
    $args = array(
    	'numberposts' => '-1',
    	'post_type' => 'star-rate' ,   //投稿タイプの指定
    	'post_status' => 'all',        //すべての投稿タイプ
    	'meta_key' => 'star-post-id',
    	'meta_value' => $post_id       //IDで紐づけしたのを引っ張る
    	);
    $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;
    
      echo '獲得総星数:';
      echo $sum_star;//計算した値を表示
      echo '<br>投票総人数:';
      echo $people;
      echo '<br>平均星数:';
      echo round($sum_star/$people,1);     //小数点第1位で四捨五入
    
    endif;
    wp_reset_postdata(); /*クエリのリセット*/ 
    ?>

    d.w.cさん

    動いてよかったです♪
    本件と関係ないすごーくどうでもいいことですが、以下のように記載すると、include等でソースが引き継げたり(組み方によります)、ソースが改行されるので私個人的には好きです。

    私も、以前、とても悩んでいた部分でしたのでお役にたててうれしいです。
    ACFはとても好きです

    
    
    $calc_star = '';
    $calc_star = 
    	
    	'獲得総星数:'.$sum_star.'<br>'.PHP_EOL.//計算した値を表示
    	'投票総人数:'.$people.'<br>'.PHP_EOL.//
    	'平均星数:'.round($sum_star/$people,1).PHP_EOL.PHP_EOL;//小数点第1位で四捨五入
        //「PHP_EOL」は改行コード
    
    echo $calc_star;
    
    
    トピック投稿者 d.w.c

    (@dwc-1)

    そんなやり方があるんですね!
    ちょっと調べてみます。

    ありがとうございますm(_ _)m

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「複数の投稿からカスタムフィールド内の数字を拾ってきて合算したい」には新たに返信することはできません。