更简单的代码:
逻辑上,当您检查
>=
对于两者
_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
正确地设置为存储在数据库中的(在post元表中)。通常,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”日期才与“compare”值一起使用YYYY-MM-DD
并用这种格式进行了测试。
tax
查询:
旧
tax
查询已弃用。因此,不要使用:
\'event-categories\' => $termSlug,
使用:
\'tax_query\' => array(
array(
\'taxonomy\' => \'event-categories\',
\'field\' => \'slug\',
\'terms\' => $termSlug,
),
),