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