• 解決済 m.murai

    (@mmurai)


    料理教室というカスタムポストタイプを作成し、タクソノミーとしてイタリアン、中華、和食と分類、
    それぞれのカスタムフィールドに都市(city)、開催日(date) 会場(place)を設定しました。
    実現したいのは各料理(タクソノミー)毎に教室開催スケジュールを表示したく、
    それぞれ都市(city)毎に、さらに開催日(date) 順で羅列したいのですが、
    こちらを参考にカスタムフィールド:都市(city)毎に一覧にするところまではできましたが
    さらに開催日(date)でソートする方法がどうしても見つかりません。
    どなたかご教授をお願致します。

    カスタムポストタイプ(seminar_schedule)
    タクソノミー(seminar_category)
    ターム:イタリアン(seminar_italian)、中華(seminar_chinese)、和食(seminar_japanese)
    カスタムフィールド: 都市(city)、開催日(date) 会場(place)、

    表示したいのは下記の通りです。

    料理教室開催日予定 ー イタリアン
    —————————
    東京
    —————————
    1月1日 東京プリンスホテル
    2月2日 ホテルオークラ東京
    3月3日 パークホテル東京
    —————————
    大阪
    —————————
    1月1日 ホテル日航大阪
    2月2日 帝国ホテル大阪
    3月3日 ホテルニューオータニ大阪
    —————————
    名古屋
    —————————
    1月1日 名古屋東急ホテル
    2月2日 ヒルトン名古屋
    3月3日 ANAクラウンプラザ

    現在のコードは下記ですが、これでは都市別にはリストされるものの表示順は投稿日順となります。

    <?php
    $args = array(
        'post_type' => 'seminar_schedule',
        'tax_query' => array(
                array(
                    'taxonomy' => 'seminar_category',
                    'field' => 'slug',
                    'terms' => 'seminar_italian'
                )
            )
        );
    
    $results = get_posts( $args );
    $children = array();
    if ( $results ) {
    	foreach ( $results as $post ) {
    	$city = get_post_meta($post->ID, 'city', true);
    	 if ( $city ) {
    		 $children[$city][] = $post;
    		}
    	 }
    if ( $children ) {
    ?>
    <ul class="seminar_list">
    <?php
    foreach ( $children as $city => $classified_children ) {
    ?>
    <li class="city"><?php echo esc_html( $city ); ?>
    <?php
    foreach ( $classified_children as $post ) {
    ?>
    <dl>
    <?php
    $date = get_post_meta($post->ID, 'date', true);
    $place = get_post_meta($post->ID, 'place', true);
    ?>
    <dt>日時:</dt><dd><?php echo $date; ?></dd>
    <dt>会場:</dt><dd><?php echo $place; ?></dd>
    </dl>
    <?php
    }
    ?>
    </li>
    <?php
    }}
    ?>
    </ul>
    <?php
    }
    ?>
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター jim912

    (@jim912)

    m.muraiさん

    get_posts のパラメーターに meta_key=date と orderby=meta_value 、order=ASCの指定を追加すれば、開催日順になるかと思います。

    トピック投稿者 m.murai

    (@mmurai)

    jim912さん、さっそくのアドバイスありがとうございます。
    「get_posts のパラメーターに meta_key=date と orderby=meta_value、、、」ですが
    実は質問の前に何度か試してみましたが、機能しませんでした。
    ちなみにコードは下記です。
    おそらくこちらの理解不足のためと思いますので、間違いをご指摘いだければ助かります。

    $args = array(
        'post_type' => 'seminar_schedule',
        'tax_query' => array(
                array(
                    'taxonomy' => 'seminar_category',
                    'field' => 'slug',
                    'terms' => 'seminar_italian',
    		'meta_key' =>'date',
    		'orderby' =>'meta_value',
                )
            )
        );
    トピック投稿者 m.murai

    (@mmurai)

    自己解決です。
    パラメータ追加の位置を下記のように訂正?することで”date”でソートされるようになりました。
    といっても「なんとなく試してみたら、、、」となんとも頼りない解決なのですが。
    「ここがこうなので前述のコード間違い」と理解できればすっきりするのでしょうが、
    自分の理解力ではなんとなくしっくりとこないながらも解決と至りました。
    ありがとうございました。

    $args = array(
        'post_type' => 'seminar_schedule',
    	'meta_key' =>'date',
    	'orderby' =>'meta_value',
    	'order'=>'ASC',
        'tax_query' => array(
                array(
                    'taxonomy' => 'seminar_category',
                    'field' => 'slug',
                    'terms' => 'seminar_italian',
    
                )
            )
        );
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタム投稿内でカスタムフィールの値でソート」には新たに返信することはできません。