カスタム投稿タイプのイベントの特定のカテゴリアーカイブ用のテンプレートを作成しています。
カスタムフィールドの日付順に並べて、将来の進行中のイベントを示すクエリを作成する必要があります。
$termName = get_queried_object()->name;
$termSlug = get_queried_object()->slug;
$event1 = current_time('Y-m-d');
$args = array(
'post_type' => 'event',
'event-categories' => $termSlug,
'post_status' => 'publish',
'posts_per_page' => 10,
'order' => 'ASC',
'meta_query' => array(
'relation' => 'OR',
array(
'relation' => 'AND',
array(
'key' => '_event_start_date',
'value' => $event1,
'compare' => '>=',
'type' => 'DATE',
),
array(
'key' => '_event_end_date',
'value' => $event1,
'compare' => '>=',
'type' => 'DATE',
)
),
array(
'key' => $event1,
'value' => array('_event_start_date','_event_start_date'),
'type' => 'DATE',
'compare' => 'BETWEEN'
)
),
'orderby' => '_event_start_date',
);
$events = new WP_Query($args);
echo $events->post_count ;
結果には将来のイベントのみが表示され、進行中のイベントは表示されません。
どうしましたか?
論理的には、>=
と_event_start_date
の両方について_event_end_date
をチェックすると、自動的にBETWEEN
チェックがカバーされます。
したがって、次のコードは機能するはずです。
$termName = get_queried_object()->name;
$termSlug = get_queried_object()->slug;
$event1 = current_time( 'Y-m-d' );
$args = array(
'post_type' => 'event',
'event-categories' => $termSlug,
'post_status' => 'publish',
'posts_per_page' => 10,
'order' => 'ASC',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => '_event_start_date',
'value' => $event1,
'compare' => '>=',
'type' => 'DATE',
),
array(
'key' => '_event_end_date',
'value' => $event1,
'compare' => '>=',
'type' => 'DATE',
)
),
'orderby' => '_event_start_date',
);
$events = new WP_Query( $args );
echo $events->post_count;
また、日付値$event1
がDatabase(post meta table)に格納されているものとして正しく設定されていることを確認してください。通常、WordPressは内部的にすべてのdate
がGMT
タイムゾーン内にあると見なします。ただし、それは_event_start_date
と_event_end_date
があなたの場合にどのように保存されているかによって異なります。格納されている値によって異なります。
// MySQL DATETIME field format
$event1 = current_time( 'mysql' );
// MySQL DATETIME field format in GMT
$event1 = current_time( 'mysql', 1 );
// Unix timestamp in local time zone
$event1 = current_time( 'timestamp' );
// Unix timestamp in GMT
$event1 = current_time( 'timestamp', 1 );
そのため、そのデータがどのように保存されているかを確認するか、これらの差異を使用してテストしてください。 date
フィールドに時間も含まれる場合は、DATETIME
型を使って作業することもできます。
また、 codex :からのメモ
'type' DATEは、日付が
YYYY-MM-DD
という形式で格納されていて、この形式でテストされている場合にのみ、 'compare'値BETWEENと連動します。
tax
クエリ:古いtax
クエリは廃止予定です。だから代わりに:
'event-categories' => $termSlug,
つかいます:
'tax_query' => array(
array(
'taxonomy' => 'event-categories',
'field' => 'slug',
'terms' => $termSlug,
),
),