早上好。我在运行get_posts()
时将作为meta_key(作为字符串返回)返回的时间戳与当前时间戳进行比较时遇到问题。
我想在将来设置end_date_time
的任何帖子,我会得到一些奇怪的行为。我正在使用高级自定义字段和高级自定义字段:日期和时间选择器来设置时间。
这是我的代码:
$time = time();
$args = array(
'post_type' => 'webinars',
'posts_per_page' => -1,
'meta_key' => 'date',
'orderby' => array('meta_value_num' => 'ASC', 'title' => 'ASC'),
'meta_query' => array(
array(
'key' => 'end_date_time',
'value' => $time,
'compare' => '>='
),
),
);
$webinars = get_posts($args);
如果设置如此,查询不会返回任何结果。我知道有一个帖子的未来时间戳设置为删除meta_query
显示它,我可以获得保存的时间戳。 (它保存为字符串)。
将字符串作为meta_query
中的数字进行比较是否存在问题?在进行比较之前,有没有办法将end_date_time
转换为int
?
我还尝试将时间转换为字符串,然后将其传递给$ args,但它似乎没有什么区别。
还有其他人遇到过这个问题吗?
更新
我修改了$time
变量以使用过去这样的时间:
$time = time()-43200;
执行此操作后,查询似乎工作正常。如果我将end_date_time
设置为将来它将在循环中显示,如果我将它设置为过去,它将从循环中删除。似乎存在某种导致这种情况的时间差异。如果没有调整的时间,从现在起两小时后发生的事件将会消失,但在调整后它们会一直显示。当他们几个小时后,他们仍然会根据需要消失。
为什么这适用于调整后的时间戳$time = time()-43200;
,而不适用于$time = time();
?
答案 0 :(得分:0)
如果您使用的是原生ACF的日期时间选择器,则只需向DATETIME
添加meta_query
类型,并确保value
具有必填格式yyyy-mm-dd hh:mm:ss
。
'meta_query' => array(
array(
'key' => 'end_date_time',
'value' => date('Y-m-d H:i:s', $time),
'compare' => '>=',
'type' => 'DATETIME'
),
),
检查Date Time Picker和WP的Meta Queries文档。