43538
舞台公演の情報サイトをWordPressで構築しております。

「公演情報」をいくつかのカスタムフィールドの項目で入力し、  
それらを固定ページで一覧表示するということをしようとしています。

情報の登録項目に、「公演日程」という項目があり、  
カレンダーピッカーから入力する項目として設けました。

現在、固定ページのテンプレートphpにて、  
↓のソースで、情報を一覧で表示するところまではできるようになりました。

この状態から、

（1）表示される内容は【現在の月】と、【現在の月の翌月】だけを降順（または昇順）で表示したい。  
→古い情報や遠い未来の情報は表示せず、当月と直近の未来の情報だけを表示するようにしたいと思っています。

（2）表示される順序は投稿日時ではなく【公演日程（開始日）】のフィールド（'schedule_start'）の日付の順序にしたい。  
→多数のユーザーがランダムに公演情報を入力する運用を想定しているため、投稿日時の順ではなく、公演日程でソートしたいと思っています。

上記の2要件を実現したいと思っているのですが、これ以降の処理がわからず悩んています。  
どのようなコードとするとよいでしょうか？  
初心者のため情報不足申し訳ありませんが、  
詳しい方にご教示いただけますと大変ありがたいです。

現コードは以下です。

```

    <?php
    $posts = get_posts('numberposts=100&category=557');
    global $post;
    ?>
    <?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
    
    <div style="padding:15px 0;border-bottom:1px dotted #dddddd;">
    
    <strong>
    <?php the_field('team_name'); ?>『<?php the_field('title'); ?>』
    </strong>
    <br>
    
    <span style="font-size:80%;">
    【公演日程】<strong>
    
    <?php $week = array("日", "月", "火", "水", "木", "金", "土"); ?>
    
    <?php $date = date_create(''.get_field('schedule_start').''); echo date_format($date,'Y年m月d日') . "(" . $week[(int)date_format($date,'w')] . ")" ; ?>
    
    〜
    
    <?php $date = date_create(''.get_field('schedule_end').''); echo date_format($date,'Y年m月d日') . "(" . $week[(int)date_format($date,'w')] . ")" ; ?>
    
    </strong>
    　<?php the_field('stages'); ?></span><br>
    <span style="font-size:80%;"><?php the_field('profile'); ?></span><br>
    <span style="font-size:80%;">【会場】<?php the_field('location'); ?></span><br>
    
    <!--URlがあれば表示、の分岐　ここから-->
    <?php $imgid = get_field('url'); ?>
    <?php if(empty($imgid)):?>
    <?php else:?>
    <span style="font-size:80%;">【公演情報】<a href="<?php get_field('url')?>" target="_blank"><?php the_field('url'); ?></a></span><br>
    <?php endif;?>
    <!--URlがあれば表示、の分岐　ここまで-->
    
    <!--見る見た表示　ここから-->
    <?php
     $cfcb = get_field_object('mirumita');
     $cfcbId = get_post_meta($post->ID,'mirumita');
     $cfcbId = $cfcbId[0];
     if($cfcb) {
     foreach($cfcbId as $v) {
     echo '<span style="font-size:60%;" class="ico-'. $v. '">' . $cfcb['choices'][$v] .'</span>';
     }
     }
     ?>
    <!--見る見た表示　ここまで-->
    
          </div><!--data_box-->
    
    <?php endforeach; endif;?>
    
    <!--公演情報呼び出しここまで-->
    
```
CC BY-SA 3.0
2018-04-24T23:19:47.780
43534
2018-04-25T01:06:20.383
28301
question
wordpress
WordPressの一覧表示のソートと表示範囲の指定
１行目の

```

    $posts = get_posts('numberposts=100&category=557');
    
```

がランダムに取得する「公演情報」という解釈で正しければ、ここを修正するだけで対応できると思います。

```

    $posts = get_posts(
               array(
                 'numberposts' => 100,
                 'category' => 557,
                 'orderby' => 'meta_value',
                 'meta_key' => 'schedule_start',
                 'order' => 'ASC'
               )
             );
    
```

とすれば `schedule_start` で古い順(昇順)ソートされると思います。  
新着順(降順)ソートなら 'order' を`ASC`→`DESC`に変更します。

つぎに期間指定は、以下でどうでしょう。

```

    $posts = get_posts(
                   array(
                     'numberposts' => 100,
                     'category' => 557,
                     'orderby' => 'meta_value',
                     'meta_key' => 'schedule_start',
                     'order' => 'ASC',
                     'meta_query' => array(
                       'key' => 'schedule_start',
                       'value' => array('2018/04/01', '2018/05/31'),
                       'compare' => 'BETWEEN',
                     )
                   )
                 );
    
```

当月、来月末は上手く考えてください^^;

いずれも試していないので、誤りがあったら申し訳ないです。

参考  
query_posts, get_postsでカスタムフィールド（meta_key）の値でソートする  
<https://qiita.com/gorton/items/fe3db19498346ecbaf6b>
CC BY-SA 3.0
2018-04-25T01:06:20.383
43538
2018-04-25T01:06:20.383
168
43534
answer