web-dev-qa-db-ja.com

複数のカスタム投稿タイプを表示し、それらのフィールドの1つによって年代順に並べ替えます

私はカスタム投稿タイプuiプラグインで作成された4つのカスタム投稿タイプを持っています。それぞれが高度なカスタムフィールドプラグインで作成された異なるカスタムフィールドのセットを持つイベントタイプを表します。

私の目標は、4つの年代順のプールからすべてのイベントを見せることです。 WP_Queryを使用して4つを照会しても問題ありませんが、これまでのところ出力を区別してソートするには心配しています。

サンプルコードはカスタム投稿タイプを問い合わせ、イベントの日付とデバッグ目的でイベントのタイプを把握するためのエコーを出力します。

<article>
    <?php $args = array(
        'post_type' => array( 'eventtype1', 'eventtype2', 'eventtype3', 'eventtype4' ),
        'posts_per_page' => -1
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
        if ( 'post_type' == 'eventtype1' ) {
          ?><p><?php the_field( 'eventtype1_date' ); ?></p><?php
          echo "event type 1";
        }
        elseif ( 'post_type' == 'eventtype2') { 
          ?><p><?php the_field( 'eventtype2_date' ); ?></p><?php 
          echo "event type 2";
        }
        elseif ( 'post_type' == 'eventtype3' ) {
          ?><p><?php the_field( 'eventtype3_date' ); ?></p><?php
          echo "event type 3";
        }
        elseif ( 'post_type' == 'eventtype4' ) {
          ?><p><?php the_field( 'eventtype4_date' ); ?></p><?php
          echo "event type 4";              
        } ?>
</article>

問題の1つは、post_typeによってWP_Query配列の範囲外を区別することが可能かどうかわからないことです。サンプルコードがまだ出力されていない理由かもしれません。

第二に、結果をソートする方法がわからない。 WP_query配列で'orderby' => 'date'を使用する場合、実際のイベントの日付ではなく、公開日でソートします。ソートについて私はそれがこの設定でまったく可能であるかどうかわからないですか?

どんなヒントでも大歓迎です。よろしくラルフ

更新:Ok私は問題を解決しました。次のコードを使用すると、日付による複数のカスタム投稿タイプで、リピータフィールド内のacf日付ピッカーフィールドとacf日付ピッカーフィールドを並べ替えることができます(クエリされる日付ピッカーを最初に配置する必要があります)。

<article>
          <?php $args = array(
                'post_type' => array( 'event_type1', 'event_type2', 'event_type3', 'event_type4' ),
                'posts_per_page' => -1,
                'meta_query' => array(
                      'relation' => 'OR',
                      array('key' => 'event1_date_0_event1_date_day'),
                      array('key' => 'event2_date'),
                      array('key' => 'event3_date_0_event3_date_day'),
                      array('key' => 'event4_date' )
                ),
                'meta_key' => 'meta_value',
                'orderby' => 'meta_value',
                'order' => 'ASC'
         );
         $the_query = new WP_Query( $args );
         if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
            if ( get_post_type() == 'event_typ1' ) {
                $e1 = get_field( 'event1_date' );
                echo "Event Type 1"; ?>
                <p><?php echo $e1[0]['event1_date_day']; ?></p><?php
            }
            elseif ( get_post_type() == 'event_typ2') {
                echo "Event Type 2:"; ?>
                <p><?php the_field( 'event2_date' ); ?></p><?php
            }
            elseif ( get_post_type() == 'event_type3' ) {
                $e3 = get_field( 'event3_date' );
                echo "Event Type 3:"; ?>
                <p><?php echo $e3[0]['event3_date_day']; ?></p><?php
            }
            elseif ( get_post_type() == 'event_type4' ) {
                echo "Event Type 4:";
                ?><p><?php the_field( 'event4_date' ); ?></p><?php
            }
         endwhile;
             wp_reset_postdata();
         else: ?>
            <p>Error</p>
         <?php endif; ?>
</article>
1
rpk

このサンプルコードでは、文字列 'post_type'が 'post_type'以外の文字列と等しくなることはないため、使用したIFステートメントはtrueを返さないため、出力はありません。 get_post_type()を使用してください。

if ( get_post_type() == 'eventtype1' ) {

カスタムフィールドを日付順に並べ替えるには、すべての投稿タイプに同じフィールドIDを使用する必要があります。

$args = array(
    'post_type' => array( 'eventtype1', 'eventtype2', 'eventtype3', 'eventtype4' ),
    'posts_per_page' => -1,
    'meta_key'      => 'start_date',
    'orderby'       => 'meta_value_num',
    'order'         => 'DESC'
);

http://www.advancedcustomfields.com/resources/how-to/orde-posts-by-custom-fields/

2
Alon Nadel