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

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

新規登録して質問してみよう
ただいま回答率
85.53%
WordPress

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

PHP

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

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

解決済

1回答

280閲覧

【WordPress】ACF Pro繰り返しフィールド内の複数のサブフィールドに入力された数値の合計値を参照して、多い順に並び替えて出力したい

AtliFreyr

総合スコア1

WordPress

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

PHP

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

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

0クリップ

投稿2023/10/17 11:55

実現したいこと

ACF Pro繰り返しフィールド内の複数のサブフィールドに入力された数値の合計値を参照して、多い順に並び替えて出力したい

前提

繰り返しフィールド'number-of-surgical-2023'の中にサブフィールド'surgical-count'があります。
以下のコードで複数の'surgical-count'の合計値を出力することはできましたが、これをWP_Queryで並び替える方法がわかりませんでした。

php

1$total = 0; 2while(the_repeater_field('nunber-of-surgical-2023')): 3 $total += intval(get_sub_field('surgical-count')); 4endwhile; 5 6(中略) 7 8$outPut .= '<td>' . $total . '</td>';

ソースコード全体

php

1add_shortcode('sc_top_ranking', 'top_ranking_sc'); 2function top_ranking_sc() { 3 4 $news_query = new WP_Query([ 5 'post_type' => 'hospitals', 6 'post_status' => 'publish', 7 'posts_per_page' => 10, 8 'order' => 'ASC' 9 ]); 10 11 if ($news_query->have_posts()) { 12 $outPut .= '<table class="ranking-table"><thead><tr><th>病院名</th><td>総手術実績</td></tr></thead><tbody>' . PHP_EOL; 13 while ($news_query->have_posts()) { 14 $news_query->the_post(); 15 $total = 0; 16 while(the_repeater_field('nunber-of-surgical-2023')): 17 $total += intval(get_sub_field('surgical-count')); 18 endwhile; 19 $outPut .= '<tr>'; 20 $outPut .= '<th><a href="' . esc_url(get_permalink()) . '">' . get_the_title() . '</a></th>'; 21 $outPut .= '<td>' . $total . '</td>'; 22 $outPut .= '</tr>' . PHP_EOL; 23 }; 24 $outPut .= '</tbody></table>' . PHP_EOL; 25 } 26 wp_reset_postdata(); 27 return $outPut; 28}

試したこと

meta_keyに以下のように記述してみたりもしましたが、やはり動作しませんでした。

php

1 $total_score = 0; 2 while(the_repeater_field('nunber-of-surgical-2023')): 3 $total_score += intval(get_sub_field('surgical-count')); 4 endwhile; 5 $news_query = new WP_Query([ 6 'post_type' => 'hospitals', 7 'post_status' => 'publish', 8 'posts_per_page' => 10, 9 'meta_key' => $total_score, 10 'orderby' => 'meta_value_num', 11 'order' => 'ASC' 12 ]);

補足情報(FW/ツールのバージョンなど)

WordPress 6.3.2
Advanced Custom Fields Pro 6.2.1.1

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ACF Pro繰り返しフィールド内の複数のサブフィールドに入力された数値の合計値を参照して、多い順に並び替えて出力したい

WP_Query の並び替えフィールドとしては ループ内で計算した結果は指定できません。WP_Query 実行時に値が決まっている必要があります。
カスタムフィールをの計算結果を利用するのであれば、あらかじめカスタムフィールドの計算結果を保存するカスタムフィールドを作成して計算結果を保存しておく必要があります。
その計算結果を保存したカスタムフィールドを指定して並び替えることになると思います。
計算するのは、各投稿の保存時に HOOK を用いて計算するのが簡単と思います。


例えば、 total というカスタムフィールドを作成して、計算結果を保存していて、WP_Query では、カスタムフィールド total の値で並び替えたら希望の順番にならないでしょうか。

カスタムフィールドの値の計算は、ACF を使われているのであれば、 acf/save_post HOOK を利用して保存時に計算した値を保存するのが良いのではないでしょうか。( 状況によっては、他の HOOK が良い場合もあるかもしれません。 )

計算して保存する例 (フィールド名は適宜置き換えてください)

PHP

1add_action('acf/save_post', 'calc_field_acf_save_post'); 2function calc_field_acf_save_post( $post_id ) { 3 $total = 0; 4 if( have_rows('parent_field', $post_id) ){ 5 while(have_rows('parent_field', $post_id)){ 6 the_row(); 7 $total += intval(get_sub_field('sub_field')); 8 } 9 } 10 update_field(’total’, $total, $post_id); 11}

投稿2023/10/27 23:54

CHERRY

総合スコア25157

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AtliFreyr

2023/10/30 07:26

CHERRY様 遅くなりましたがご回答ありがとうございます! まさに意図したとおりの実装が出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問