2

我正在处理即将发生的事件列表。我创建了一个自定义帖子类型,带有一个自定义字段:event_start_date。我还有一些多日扩展事件,由一个额外的自定义字段定义: event_end_date 。

我有一个代码适用于 start_date 晚于今天的事件。但是我没有合并 end_date 条件。我尝试使用具有 OR 关系的 meta_query,但目前不起作用:

$args = array(
    'post_type' => 'events',
    'posts_per_page' => 4,
    'orderby' => 'event_start_date',
    'order' => 'ASC',
    'meta_query' => array(
         'relation' => 'OR',
          array('key'  => 'event_start_date',
              'value' => date('m/d/Y', strtotime('-1 day')),
              'compare' => '>='),

              array('key'  => 'event_end_date',
                  'value' => date('m/d/Y', strtotime('-1 day')),
                  'compare' => '>=')
    )
);
$loop = new WP_Query( $args ); 
while ( $loop->have_posts() ) : $loop->the_post();
// Rest of the loop

提前致谢。

注意:我有这个其他查询,它可以完美地选择只有开始日期>而不是当前日期的事件。

                    $args = array(
                    'post_type' => 'events',
                    'posts_per_page' => 4,
                    'meta_key'  => 'event_start_date',
                    'meta_value' => date('m/d/Y', strtotime('-1 day')),
                    'meta_compare' => '>=', 
                    'orderby' => 'event_start_date',
                    'order' => 'ASC',           
                    ); // The same loop and query
4

2 回答 2

1

实际上,要按元键排序,meta-key查询中必须存在并使用meta_valueasorderby值。

$args = array(
    'post_type' => 'events',
    'posts_per_page' => 4,
    'meta_key' => 'event_start_date', // required to be used in orderby
    'meta_query' => array(
        'relation' => 'OR',
            array(
                'key'  => 'event_start_date',
                'value' => date('m/d/Y'),
                'compare' => '>'
            ),
            array(
                'key'  => 'event_end_date',
                'value' => date('m/d/Y'),
                'compare' => '>'
            )
    ),
    'orderby' => 'meta_value', // orderby will use the value of meta_key
    'order' => 'asc',
);
$loop = new WP_Query($args);

您也可以在每个 meta_query 数组中使用一个类型,如下所示

array(
    'key'  => 'event_end_date',
    'value' => date('m/d/Y'),
    'compare' => '>',
    'type' => 'DATE' // to specify the type of the field/value
)

更新:您应该使用date('m/d/Y')'compare' => '>'确保您的日期格式正确,因为现在它在(月/日/年)。date('m/d/Y', strtotime('-1 day'))也会显示过去的日期。

如果其他一切都正确,这应该可以工作。 在这里阅读

于 2012-08-05T03:34:30.983 回答
1

解决方案对我不起作用(mybe 主题对于旧版本来说太旧了)。对于下一个搜索者 - 显示所有过去事件的解决方案(带分页)

  'post_type' => 'event', 
  'suppress_filters' => false,
  'meta_key'  => '_eventorganiser_schedule_last_start', // OR _eventorganiser_schedule_start_start OR ..._start_finish OR ..._last_finish
  'meta_value' => date('Y-m-d', strtotime('today')),
  'meta_compare' => '<', 
  'orderby' => '_eventorganiser_schedule_last_start',
  'order' => 'DESC',
  'paged' => get_query_var('paged')
于 2016-08-14T04:47:24.810 回答