简单WP查询即将发生或结束日期的即将发生的事件

时间:2012-08-05 01:39:24

标签: wordpress events

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

2 个答案:

答案 0 :(得分:1)

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

MyContext contextx = new MyContext(Effort.DbConnectionFactory.CreateTransient());

var client = new Client
{
    ClientId = 2,
    PersonId = 3,
    Person = new Person
    {
        PersonId = 3,
        EMail = "xxxxx@gmail.com"
    }
};
contextx.Client.Add(client); //<-- client got added, I checked it and is there

var email = contextx.Client.Select(c => c.Person.EMail).FirstOrDefault(); 

答案 1 :(得分:0)

实际上,要按元键排序,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