0

我正在处理以下问题,尝试通过使用 Advanced Custom Fields 插件Date and Time Picker add-on 创建的元键对自定义帖子类型进行排序。该插件创建了一个 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,这样就没有与时间关联的日期。问题是我必须重新设置所有事件的时间,而且,我仍然必须管理一个 meta_query,它可以在 AM 时间之后对 PM 时间进行排序,因为当我这样做时,它仍然会排序下午 5:00 之后的上午 9:00。我玩过使用meta_query并将 type 设置为 'TIME' 但仍然没有运气。

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

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

有什么方法可以做到这一点,还是我必须使用一些函数或 pre_get_posts 过滤器来格式化 meta_key,以便我可以在循环开始之前将它作为格式化变量访问?任何帮助是极大的赞赏!

4

1 回答 1

0

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

<?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);?>

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

吉米

于 2013-11-23T18:58:30.133 回答