WordPress - 时间排序与使用UNIX时间戳的meta_key由于日期差异而失败


WordPress - time sort with meta_key using UNIX timestamp failing due to date difference

我正在处理以下问题,尝试通过使用高级自定义字段插件日期和时间选择器加载项创建的元键对自定义帖子类型进行排序。该插件创建了一个 jQuery 日期选择器,供用户在仪表板中设置时间。默认情况下,选项save_as_timestamp设置为 true,因此后端中的数据设置为 Unix 时间戳/纪元时间。

我正在尝试按时间对一系列事件(全部发生在一天)进行排序。我遇到的问题是,如果所有事件都添加到一天,那么它们会正确排序(例如,上午 9:00 的事件将首先出现,下午 5:00 事件将排在最后)。但是,如果一两天后,我的老板在列表中添加了一个新事件,它将显示为最后一个事件,如果是上午 9:00 的事件,因为它的日期不同。我的帖子类型查询如下:

<?php $args = array(
    'post_type' => 'event',
    'posts_per_page' => -1,
    'nopaging' => true,
    'post_status' => 'publish',
    'meta_key' => 'start_time',
    'orderby' => 'meta_value_num',
    'order' => 'ASC'
);
$my_query = new WP_Query( $args );
while( $my_query->have_posts() ) : $my_query->the_post(); ?>

据我估计,我有两个选择,将save_as_timestamp选项更改为 false,这样就不会有日期与时间相关联。问题是我必须进入并再次设置所有事件的时间,并且仍然,我必须管理一个可以在 AM 时间之后对 PM 时间进行排序的meta_query,因为当我这样做时,它仍然在下午 9:00 时间之后对上午 5:00 时间进行排序。我已经尝试使用meta_query并将类型设置为"TIME",但仍然没有运气。

第二种选择,我想我可以使用 PHP 中的日期、时间或 DateTime 函数的某种组合来格式化时间戳,但我不知道如何正确执行此操作。我尝试在查询中添加以下内容,但我根本没有meta_query经验:

'meta_query' => array(
    array(
        'key' => 'start_time',
        'value' => date('Hi', time()),
        'compare' => '>='
    )
)

有没有办法做到这一点,或者我是否必须使用一些函数或pre_get_posts过滤器来格式化meta_key,以便我可以在循环开始之前将其作为格式化变量访问?任何帮助将不胜感激!

自己不是专业人士,但我让它像这样工作:

<?php 
$args = array(
'post_type' => 'post',
'category_name' => 'openbare-zitdagen',
'posts_per_page' => -1,
'paged' => $paged,
'meta_key' => 'datum_zitdag',
'orderby'=> 'meta_value_num',
'order' => 'DESC'
);
$my_query = new WP_Query( $args );
while ($my_query -> have_posts()) : $my_query -> the_post(); ?>

我在仪表板中使用此格式:日期格式:dd-mm-yy 和时间格式:HH:mm

获取字段作为时间戳?我选择了"是",因为我想使用 date() 函数来选择我喜欢的格式。

<?php $str_timestamp = get_field('datum_zitdag');
$int_timestamp = (int) $str_timestamp;
echo date("d/m/Y H:i", $int_timestamp);?>

但我不知道为什么它在你的情况下不起作用,

吉 米