WordPress get_posts()无法比较meta_query中的时间戳

时间:2016-01-19 15:55:56

标签: php wordpress datetime advanced-custom-fields

早上好。我在运行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();

1 个答案:

答案 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文档。