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

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

ただいまの
回答率

88.77%

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,820

yamgt

score 8

前提・実現したいこと

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)

※この情報でよいでしょうか?

if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array (
    'key' => 'group_58532f7a289e8',
    'title' => 'イベント情報を追加・編集',
    'fields' => array (
        array (
            'key' => 'field_58532fbe44f87',
            'label' => 'イベント情報',
            'name' => 'event-cat',
            'type' => 'repeater',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array (
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'collapsed' => '',
            'min' => '',
            'max' => '',
            'layout' => 'row',
            'button_label' => '行を追加',
            'sub_fields' => array (
                array (
                    'key' => 'field_5853369744f89',
                    'label' => 'カテゴリー名',
                    'name' => 'event-cat-name',
                    'type' => 'text',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array (
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'default_value' => 'Event',
                    'placeholder' => '',
                    'prepend' => '',
                    'append' => '',
                    'maxlength' => '',
                ),
                array (
                    'key' => 'field_58533a0e44f8a',
                    'label' => 'カテゴリーラベル',
                    'name' => 'event-cat-label',
                    'type' => 'text',
                    'instructions' => 'かならず半角英数字で入力してください',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array (
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'default_value' => 'event-cat-label',
                    'placeholder' => '',
                    'prepend' => '',
                    'append' => '',
                    'maxlength' => '',
                ),
                array (
                    'key' => 'field_58533aaa44f8b',
                    'label' => 'イベントセット',
                    'name' => 'event-set',
                    'type' => 'repeater',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array (
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'collapsed' => '',
                    'min' => '',
                    'max' => '',
                    'layout' => 'row',
                    'button_label' => '行を追加',
                    'sub_fields' => array (
                        array (
                            'key' => 'field_58533b0144f8c',
                            'label' => 'イベントの名前',
                            'name' => 'event-set-name',
                            'type' => 'text',
                            'instructions' => 'イベントの名前を入力してください',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => 'イベントの名前を入力してください',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array (
                            'key' => 'field_58533b5d44f8d',
                            'label' => 'イベントの開催日時',
                            'name' => 'event-set-date',
                            'type' => 'text',
                            'instructions' => 'イベントの開催日・曜日・時間を入力してください。
例)2017年1月1日(日)10:00~12:00',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '0000年00月00日(曜日)00:00~00:00',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array (
                            'key' => 'field_58533d2644f8e',
                            'label' => 'イベントのキャッチコピー',
                            'name' => 'event-set-catchcopy',
                            'type' => 'textarea',
                            'instructions' => '30字程度',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => 'イベントのキャッチコピー',
                            'maxlength' => '',
                            'rows' => '',
                            'new_lines' => 'wpautop',
                        ),
                        array (
                            'key' => 'field_58533d8344f8f',
                            'label' => 'イベントのイメージ画像',
                            'name' => 'event-set-image',
                            'type' => 'image',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'return_format' => 'id',
                            'preview_size' => 'full',
                            'library' => 'all',
                            'min_width' => '',
                            'min_height' => '',
                            'min_size' => '',
                            'max_width' => '',
                            'max_height' => '',
                            'max_size' => '',
                            'mime_types' => '',
                        ),
                        array (
                            'key' => 'field_58533e1544f90',
                            'label' => 'イベントの紹介文',
                            'name' => 'event-set-description',
                            'type' => 'textarea',
                            'instructions' => '150字程度',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => 'イベントの紹介文',
                            'maxlength' => '',
                            'rows' => '',
                            'new_lines' => 'wpautop',
                        ),
                        array (
                            'key' => 'field_58533e5b44f91',
                            'label' => 'イベントの会場',
                            'name' => 'event-set-place',
                            'type' => 'text',
                            'instructions' => '会場を入力してください',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => 'イベントの会場',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                        array (
                            'key' => 'field_58533ed344f92',
                            'label' => 'イベントの受付開始・開催時間',
                            'name' => 'event-set-time',
                            'type' => 'textarea',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '受付:00:00~、開場:00:00~00:00',
                            'maxlength' => '',
                            'rows' => '',
                            'new_lines' => 'wpautop',
                        ),
                        array (
                            'key' => 'field_58533f3844f93',
                            'label' => 'イベントの参加費',
                            'name' => 'event-set-price',
                            'type' => 'textarea',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '男性:0000円 女性:0000円',
                            'maxlength' => '',
                            'rows' => '',
                            'new_lines' => 'wpautop',
                        ),
                        array (
                            'key' => 'field_58533fa144f94',
                            'label' => 'イベントの参加資格・人数',
                            'name' => 'event-set-shikaku',
                            'type' => 'textarea',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '男性:○○が好きな独身社会人00名、女性:○○が好きな独身社会人00名',
                            'maxlength' => '',
                            'rows' => '',
                            'new_lines' => 'wpautop',
                        ),
                        array (
                            'key' => 'field_5853402b44f95',
                            'label' => 'イベントの対象年齢',
                            'name' => 'event-set-age',
                            'type' => 'textarea',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '男性:00歳~00歳、女性:00歳~00歳',
                            'maxlength' => '',
                            'rows' => '',
                            'new_lines' => 'wpautop',
                        ),
                        array (
                            'key' => 'field_5853406744f96',
                            'label' => 'イベント参加受付',
                            'name' => 'event-set-join',
                            'type' => 'wysiwyg',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'tabs' => 'text',
                            'toolbar' => 'full',
                            'media_upload' => 1,
                        ),
                        array (
                            'key' => 'field_585dfc2bb77b5',
                            'label' => '合番',
                            'name' => 'event-set-number',
                            'type' => 'text',
                            'instructions' => 'ソートのためのテスト',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                        ),
                    ),
                ),
            ),
        ),
    ),
    'location' => array (
        array (
            array (
                'param' => 'page',
                'operator' => '==',
                'value' => '10',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'normal',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => '',
    'active' => 1,
    'description' => '',
));

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2016/12/24 14:13

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

    キャンセル

  • yamgt

    2016/12/24 15:44

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

    キャンセル

回答 1

+1

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

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


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

$rows = arsort($rows)


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

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

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

while ( $my_query->have_posts() )


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/29 15: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ループ前に入れておくのが効果的なのかなー…と。
    このように考えて実行した結果、ソートは行われませんでした。

    キャンセル

  • 2016/12/29 16:33

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

    キャンセル

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

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る