【问题标题】:WordPress get_posts() trouble comparing timestamps in meta_queryWordPress get_posts() 在 meta_query 中比较时间戳时遇到问题
【发布时间】: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


【解决方案1】:

如果您使用本机 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 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多