【问题标题】:Simple WP Query upcoming events with start OR end date简单的 WP 用开始或结束日期查询即将发生的事件
【发布时间】:2012-08-02 12:59:10
【问题描述】:

我正在处理即将发生的事件列表。我创建了一个自定义帖子类型,带有一个自定义字段: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

【问题讨论】:

    标签: wordpress events


    【解决方案1】:

    实际上要按元键排序,meta-key 必须存在于查询中,并将meta_value 用作orderby 值。

    $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')) 也会显示过去的日期。

    如果其他一切都正确,这应该可以工作。 Read Here.

    【讨论】:

    • 谢谢@Sheikh。我测试了您的建议,但不幸的是,结果显示了所有事件列表,包括过去的事件。我认为问题可能出在“meta_query”周围。 -祝福
    • 仍然无法正常工作,已列出所有事件。我认为我的日期格式是正确的,因为我已经开始使用仅使用开始日期才能完美运行的其他“查询”。以防万一,我附上了这个“其他查询”的论点。谢谢。
    【解决方案2】:

    解决方案对我不起作用(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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      相关资源
      最近更新 更多