将元密钥与Pre Get POST中的当前日期进行比较

时间:2019-06-20 作者:Gregory Schultz

我正在寻找一种将字符串与当前时间进行比较的方法。我发现了这个问题“pre_get_posts filter using numeric meta_query comparison (from dates)“我对如何让它发挥作用感到困惑。

$expire = get_field(\'status_time_duration\') + get_the_time(\'U\');  // UNIX time that gets the publish date plus an additional time in seconds
基本上,我的查询是在字符串$expire 小于当前时间。

我的当前代码:

function alerts_opby( $qvars ){ //function to call up the query
$qvars[] = \'opby_alerts\';
return $qvars;
}
add_filter( \'query_vars\', \'alerts_opby\' );

function opby_query( $query ) { //pre_get_posts functions
if (isset( $query->$qvars[\'opby_alerts\'] )) {
    $expire = get_field(\'status_time_duration\') + get_the_time(\'U\');
    $current = date( \'U\', current_time( \'timestamp\', 0 ) );
    $query->set(\'tax_query\', array(array(\'taxonomy\' => \'post_format\',\'field\' => \'slug\',\'terms\' => array( \'post-format-status\' ),\'operator\'=> \'IN\'),
),\'meta_query\', [
    \'relation\' => \'OR\',
    [
     \'key\'     => \'status_time_duration\',
     \'value\'   => $expire,
     \'compare\' => \'<=\',
     \'type\'    => \'NUMERIC\',
    ],
    [
     \'key\'     => \'status_time_duration\',
     \'compare\' => \'NOT EXISTS\',
    ],
],
    $query->set(\'posts_per_page\', -1));
}
return $query;
}
add_action( \'pre_get_posts\', \'opby_query\' );

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

你所尝试的是不可能的WP_Query.

原因是,因为您只存储了持续时间,所以在知道发布日期和持续时间并将其相加之前,无法判断帖子是否已过期。这就是它的作用:

$expire = get_field( \'status_time_duration\' ) + get_the_time( \'U\' ); 
该代码依赖于您已经拥有该帖子的状态持续时间和时间。什么时候pre_get_posts 运行时,帖子甚至没有被查询,顾名思义,这意味着您无法执行添加。

可以在原始SQL查询中进行必要的添加和比较,但是WP_Query 不提供执行此类查询的功能。

由于这些原因,如果要以这种方式查询到期时间,那么将到期时间存储为持续时间是一个糟糕的选择。存储帖子过期的绝对日期和时间要容易得多,然后可以使用简单的元查询将该日期与当前日期进行比较:

\'meta_query\', [
    \'relation\' => \'OR\',
    [
        \'key\'     => \'status_time_duration\',
        \'value\'   => date( \'U\' ),
        \'compare\' => \'<=\',
        \'type\'    => \'NUMERIC\',
    ],
    [
        \'key\'     => \'status_time_duration\',
        \'compare\' => \'NOT EXISTS\',
    ],
],
请注意,上面的代码只是一个示例,说明您是否更改了存储过期时间的方式,并且无法使用当前设置。

相关推荐

Calculations in functions.php

我为自己创建了一个发票主题,并试图在自定义列中获取发票总额。我已经尝试调整模板页面中使用的代码,以便在函数中显示这一点。php文件,但它不工作。我的乘法操作数出现了一个操作数错误,我不知道为什么。这是我的代码(如有任何帮助,将不胜感激)。if( $column_name == \'invoice_total\' ) { $hours = 0; // This allows counting of each sub_field //* Set repeater va