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

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

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

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

Q&A

1回答

4734閲覧

Advanced Custom Fieldsのリピーターフィールドで入れた情報を昇順でソートしたい

yamgt

総合スコア9

WordPress

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

0グッド

0クリップ

投稿2016/12/24 04:57

編集2016/12/24 06:33

###前提・実現したいこと
Advanced Custom Fieldsのリピーターフィールド機能を使って作成された情報を、
昇順でソートしたいです。

イベント情報のサイトを制作中です。
現状では作成されたイベント情報が、登録順に並んでいます。

リピーターフィールドの設定内容はキャプチャのとおりです。
ソートする対象にしたいのは、
「イベントセット3」内の「サブフィールド2」に入れている「イベントの開催日時」です。
「イベントの開催日時」入力欄には、
「2016年12月25日(日)10:00-12:00」
と西暦・月日・曜日・時間をまとめて入れています。

イメージ説明

###試したこと
Advanced Custom Fieldsで入力した内容を、値でソートをかける方法があるようです。
以下のサイトを参考にして、

Advanced Custom Fieldsの値でソートをかける方法
リンク内容

'meta_key' => 'event-set-date',
としても表示に変わりありませんでした。

###ACFの出力コード
出力コードは以下のように入れてみました。文字制限にひっかかるので画像でスイマセン。
ソートするためのコードを入れる場所が違うのか、「2016年12月25日(日)10:00-12:00」と西暦から時間まで、まとめてテキストで入れているから
ソートできないのか判断しかねています。
イメージ説明

###補足情報(ツール等のバージョンなど)
使用バージョン WordPress 4.7
テーマ 賢威7.0 クール版
Advanced Custom Fields PRO バージョン 5.4.3

###追記(2016/12/24/15:30)
※この情報でよいでしょうか?

PHP

1if( function_exists('acf_add_local_field_group') ): 2 3acf_add_local_field_group(array ( 4 'key' => 'group_58532f7a289e8', 5 'title' => 'イベント情報を追加・編集', 6 'fields' => array ( 7 array ( 8 'key' => 'field_58532fbe44f87', 9 'label' => 'イベント情報', 10 'name' => 'event-cat', 11 'type' => 'repeater', 12 'instructions' => '', 13 'required' => 0, 14 'conditional_logic' => 0, 15 'wrapper' => array ( 16 'width' => '', 17 'class' => '', 18 'id' => '', 19 ), 20 'collapsed' => '', 21 'min' => '', 22 'max' => '', 23 'layout' => 'row', 24 'button_label' => '行を追加', 25 'sub_fields' => array ( 26 array ( 27 'key' => 'field_5853369744f89', 28 'label' => 'カテゴリー名', 29 'name' => 'event-cat-name', 30 'type' => 'text', 31 'instructions' => '', 32 'required' => 0, 33 'conditional_logic' => 0, 34 'wrapper' => array ( 35 'width' => '', 36 'class' => '', 37 'id' => '', 38 ), 39 'default_value' => 'Event', 40 'placeholder' => '', 41 'prepend' => '', 42 'append' => '', 43 'maxlength' => '', 44 ), 45 array ( 46 'key' => 'field_58533a0e44f8a', 47 'label' => 'カテゴリーラベル', 48 'name' => 'event-cat-label', 49 'type' => 'text', 50 'instructions' => 'かならず半角英数字で入力してください', 51 'required' => 0, 52 'conditional_logic' => 0, 53 'wrapper' => array ( 54 'width' => '', 55 'class' => '', 56 'id' => '', 57 ), 58 'default_value' => 'event-cat-label', 59 'placeholder' => '', 60 'prepend' => '', 61 'append' => '', 62 'maxlength' => '', 63 ), 64 array ( 65 'key' => 'field_58533aaa44f8b', 66 'label' => 'イベントセット', 67 'name' => 'event-set', 68 'type' => 'repeater', 69 'instructions' => '', 70 'required' => 0, 71 'conditional_logic' => 0, 72 'wrapper' => array ( 73 'width' => '', 74 'class' => '', 75 'id' => '', 76 ), 77 'collapsed' => '', 78 'min' => '', 79 'max' => '', 80 'layout' => 'row', 81 'button_label' => '行を追加', 82 'sub_fields' => array ( 83 array ( 84 'key' => 'field_58533b0144f8c', 85 'label' => 'イベントの名前', 86 'name' => 'event-set-name', 87 'type' => 'text', 88 'instructions' => 'イベントの名前を入力してください', 89 'required' => 0, 90 'conditional_logic' => 0, 91 'wrapper' => array ( 92 'width' => '', 93 'class' => '', 94 'id' => '', 95 ), 96 'default_value' => '', 97 'placeholder' => 'イベントの名前を入力してください', 98 'prepend' => '', 99 'append' => '', 100 'maxlength' => '', 101 ), 102 array ( 103 'key' => 'field_58533b5d44f8d', 104 'label' => 'イベントの開催日時', 105 'name' => 'event-set-date', 106 'type' => 'text', 107 'instructions' => 'イベントの開催日・曜日・時間を入力してください。 108例)2017年1月1日(日)10:00~12:00', 109 'required' => 0, 110 'conditional_logic' => 0, 111 'wrapper' => array ( 112 'width' => '', 113 'class' => '', 114 'id' => '', 115 ), 116 'default_value' => '', 117 'placeholder' => '0000年00月00日(曜日)00:00~00:00', 118 'prepend' => '', 119 'append' => '', 120 'maxlength' => '', 121 ), 122 array ( 123 'key' => 'field_58533d2644f8e', 124 'label' => 'イベントのキャッチコピー', 125 'name' => 'event-set-catchcopy', 126 'type' => 'textarea', 127 'instructions' => '30字程度', 128 'required' => 0, 129 'conditional_logic' => 0, 130 'wrapper' => array ( 131 'width' => '', 132 'class' => '', 133 'id' => '', 134 ), 135 'default_value' => '', 136 'placeholder' => 'イベントのキャッチコピー', 137 'maxlength' => '', 138 'rows' => '', 139 'new_lines' => 'wpautop', 140 ), 141 array ( 142 'key' => 'field_58533d8344f8f', 143 'label' => 'イベントのイメージ画像', 144 'name' => 'event-set-image', 145 'type' => 'image', 146 'instructions' => '', 147 'required' => 0, 148 'conditional_logic' => 0, 149 'wrapper' => array ( 150 'width' => '', 151 'class' => '', 152 'id' => '', 153 ), 154 'return_format' => 'id', 155 'preview_size' => 'full', 156 'library' => 'all', 157 'min_width' => '', 158 'min_height' => '', 159 'min_size' => '', 160 'max_width' => '', 161 'max_height' => '', 162 'max_size' => '', 163 'mime_types' => '', 164 ), 165 array ( 166 'key' => 'field_58533e1544f90', 167 'label' => 'イベントの紹介文', 168 'name' => 'event-set-description', 169 'type' => 'textarea', 170 'instructions' => '150字程度', 171 'required' => 0, 172 'conditional_logic' => 0, 173 'wrapper' => array ( 174 'width' => '', 175 'class' => '', 176 'id' => '', 177 ), 178 'default_value' => '', 179 'placeholder' => 'イベントの紹介文', 180 'maxlength' => '', 181 'rows' => '', 182 'new_lines' => 'wpautop', 183 ), 184 array ( 185 'key' => 'field_58533e5b44f91', 186 'label' => 'イベントの会場', 187 'name' => 'event-set-place', 188 'type' => 'text', 189 'instructions' => '会場を入力してください', 190 'required' => 0, 191 'conditional_logic' => 0, 192 'wrapper' => array ( 193 'width' => '', 194 'class' => '', 195 'id' => '', 196 ), 197 'default_value' => '', 198 'placeholder' => 'イベントの会場', 199 'prepend' => '', 200 'append' => '', 201 'maxlength' => '', 202 ), 203 array ( 204 'key' => 'field_58533ed344f92', 205 'label' => 'イベントの受付開始・開催時間', 206 'name' => 'event-set-time', 207 'type' => 'textarea', 208 'instructions' => '', 209 'required' => 0, 210 'conditional_logic' => 0, 211 'wrapper' => array ( 212 'width' => '', 213 'class' => '', 214 'id' => '', 215 ), 216 'default_value' => '', 217 'placeholder' => '受付:00:00~、開場:00:00~00:00', 218 'maxlength' => '', 219 'rows' => '', 220 'new_lines' => 'wpautop', 221 ), 222 array ( 223 'key' => 'field_58533f3844f93', 224 'label' => 'イベントの参加費', 225 'name' => 'event-set-price', 226 'type' => 'textarea', 227 'instructions' => '', 228 'required' => 0, 229 'conditional_logic' => 0, 230 'wrapper' => array ( 231 'width' => '', 232 'class' => '', 233 'id' => '', 234 ), 235 'default_value' => '', 236 'placeholder' => '男性:0000円 女性:0000円', 237 'maxlength' => '', 238 'rows' => '', 239 'new_lines' => 'wpautop', 240 ), 241 array ( 242 'key' => 'field_58533fa144f94', 243 'label' => 'イベントの参加資格・人数', 244 'name' => 'event-set-shikaku', 245 'type' => 'textarea', 246 'instructions' => '', 247 'required' => 0, 248 'conditional_logic' => 0, 249 'wrapper' => array ( 250 'width' => '', 251 'class' => '', 252 'id' => '', 253 ), 254 'default_value' => '', 255 'placeholder' => '男性:○○が好きな独身社会人00名、女性:○○が好きな独身社会人00名', 256 'maxlength' => '', 257 'rows' => '', 258 'new_lines' => 'wpautop', 259 ), 260 array ( 261 'key' => 'field_5853402b44f95', 262 'label' => 'イベントの対象年齢', 263 'name' => 'event-set-age', 264 'type' => 'textarea', 265 'instructions' => '', 266 'required' => 0, 267 'conditional_logic' => 0, 268 'wrapper' => array ( 269 'width' => '', 270 'class' => '', 271 'id' => '', 272 ), 273 'default_value' => '', 274 'placeholder' => '男性:00歳~00歳、女性:00歳~00歳', 275 'maxlength' => '', 276 'rows' => '', 277 'new_lines' => 'wpautop', 278 ), 279 array ( 280 'key' => 'field_5853406744f96', 281 'label' => 'イベント参加受付', 282 'name' => 'event-set-join', 283 'type' => 'wysiwyg', 284 'instructions' => '', 285 'required' => 0, 286 'conditional_logic' => 0, 287 'wrapper' => array ( 288 'width' => '', 289 'class' => '', 290 'id' => '', 291 ), 292 'default_value' => '', 293 'tabs' => 'text', 294 'toolbar' => 'full', 295 'media_upload' => 1, 296 ), 297 array ( 298 'key' => 'field_585dfc2bb77b5', 299 'label' => '合番', 300 'name' => 'event-set-number', 301 'type' => 'text', 302 'instructions' => 'ソートのためのテスト', 303 'required' => 0, 304 'conditional_logic' => 0, 305 'wrapper' => array ( 306 'width' => '', 307 'class' => '', 308 'id' => '', 309 ), 310 'default_value' => '', 311 'placeholder' => '', 312 'prepend' => '', 313 'append' => '', 314 'maxlength' => '', 315 ), 316 ), 317 ), 318 ), 319 ), 320 ), 321 'location' => array ( 322 array ( 323 array ( 324 'param' => 'page', 325 'operator' => '==', 326 'value' => '10', 327 ), 328 ), 329 ), 330 'menu_order' => 0, 331 'position' => 'normal', 332 'style' => 'default', 333 'label_placement' => 'top', 334 'instruction_placement' => 'label', 335 'hide_on_screen' => '', 336 'active' => 1, 337 'description' => '', 338)); 339 340endif;

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/12/24 05:13

ぱっと見、まずは`$my_query`をどこでも使っていないことが間違いです。よろしければ、ACFのExport機能「Export to PHP」で出力したコードを追記していただけますか?
yamgt

2016/12/24 06:44

コード追記しました。参考元に入れ忘れてましたが、書籍『現場でかならず使われているWordPressデザインのメソッド[アップデート版] 』に載っていたコードをだいたいそのまま使いました。ここには、ご指摘の`$my_query`がありませんでした…。
guest

回答1

0

'event-set'のwhile文の段階で既にループする順番が確定してしまっていますので
(while文でループしてしまっているわけですから)

php

1$rows = get_field('event-set');

で行をすべて配列に入れ込んでから
$row['event-set-date']
の値でソートをかけてはいかがでしょうか。

php

1$rows = arsort($rows)

本当はwhile回す時の順序のほうを決めてしまう方がスマートだとは思いますが
こういう方法も考えられると言うことで。

参考URL
Advanced Custom Feld のアドオン Repeater Field の出力方法を紹介
http://hirashimatakumi.com/blog/30.html

※$my_queryでクエリーに順番指定したデータを格納しても

php

1while ( $my_query->have_posts() )

でループを回してやらないとどこにも出力しないわけです。
wp_query
等で検索してみたらいいと思います。

投稿2016/12/28 05:33

編集2016/12/28 05:49
Nor.A

総合スコア41

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

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

yamgt

2016/12/29 06:14

回答ありがとうございます。参考になります! 当方初心者のため、アドバイスいただいたことが把握できてるか不安なので 確認させてください。 以下のコードを、 <?php $rows = get_field('event-set'); $row['event-set-date']; $rows = arsort($rows); $my_query = new WP_Query($rows); ?> 以下のループの前に入れ込むと考えてよいでしょうか。 <?php if( get_sub_field('event-set') ): //ループ開始 while( has_sub_field('event-set') ): ?> event-setの中身を、event-set-dateの値をもとにソートするので event-setループ前に入れておくのが効果的なのかなー…と。 このように考えて実行した結果、ソートは行われませんでした。
yamgt

2016/12/29 07:33

追記です。 後半のコメントの意味を理解していませんでした。  $my_query = new WP_Query($rows); と入れるならば、セットで  while ( $my_query->have_posts() ) を入れないと出力されないのですね。WP_Queryの書き方、検索してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問