【发布时间】:2016-04-25 04:33:13
【问题描述】:
早上好。在运行 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();?
【问题讨论】:
-
假设该值实际上是一个时间戳(整数),那么您需要做的就是将其添加到您的元查询中:
'type' => 'numeric'。 -
当我 var_dump() 工作循环中的值时,它作为已转换为字符串的时间戳返回。我假设这就是它在数据库中的保存方式。
-
这应该没关系...您仍在进行数字比较。
标签: php wordpress datetime advanced-custom-fields