如果使用WP_Query已经过了时间,请不要显示WordPress帖子

时间:2016-06-27 09:27:47

标签: php wordpress date time

我有一个自定义帖子类型的日程表,我可以使用自定义字段Timeslot添加“事件”。此自定义字段是使用ACF Pro的转发器。 它包含日期,开始时间和结束时间。日期选择器和时间选择器分别。

在主页上,我有一个图像滑块,可以按时间顺序输入图稿和事件标题,并仅显示“今日”事件。 我现在要做的是不显示已经过去的事件。因此,如果当前时间是下午14:00,那么在该时间之前结束的所有节目将不会显示。如果节目在下午13:00开始并在下午15:00结束,该节目仍将显示,并将首先显示。我希望这有道理吗?!

到目前为止,这是我的WP_Query,但经过几次尝试后,我无法弄清楚如何根据需要修改它:

            <?php
                $args = array(
                  'post_type'      => 'schedule',
                  'posts_per_page' => '-1',
                  'meta_query'     => array(
                    'relation'     => 'AND',
                      'date_clause' => array(
                        'key'     => 'schedule_time_slot_%_schedule_show_date',
                        'compare' => '=',
                        'value'   => $day,
                      ),
                      'time_clause' => array(
                        'key'     => 'schedule_time_slot_%_schedule_show_start_time',
                        'compare' => 'EXISTS',
                      ),
                    ),
                    'orderby' => array(
                      'date_clause' => 'ASC',
                      'time_clause' => 'ASC',
                    )
                );

1 个答案:

答案 0 :(得分:1)

        <?php
            $args = array(
              'post_type'      => 'schedule',
              'posts_per_page' => '-1',
              'meta_query'     => array(
                'relation'     => 'AND',
                  'date_clause' => array(
                    'key'     => 'schedule_time_slot_%_schedule_show_date',
                    'compare' => '=',
                    'value'   => $day,
                  ),
                  'time_clause' => array(
                     'key'     => 'schedule_time_slot_%_schedule_show_start_time',
                     'compare' => '>=',
                     'value'   => time(),
                  ),
                ),
                'orderby' => array(
                  'date_clause' => 'ASC',
                  'time_clause' => 'ASC',
                )
            );

请注意time_clause参数的更改。因此,只有在等于或晚于现在的时间时才显示time_clause。