我有一个每月显示事件的页面。每个事件都有一个start_date和finish_date作为yymmdd。如果一个事件跨越两个不同的月份,它应该在每个月显示它跨越。例如,如果我的开始日期为2014年3月19日,结束日期为2014年6月19日,那么它应该出现在3月,4月,5月和6月。
我一直在尝试使用meta_query在wordpress中执行此操作,但我认为它不可能:
// Get chosen month to display from URL
$events_month = sanitize_text_field($_GET["month"]);
$events_year = sanitize_text_field($_GET["year"]);
// Convert chosen month to display to a timestamp
$ts = strtotime("$events_month $events_year");
// Create chosen month start end end dates to use for query
$month_start_date = date('Ym01', $ts);
$month_end_date = date('Ymt', $ts);
$args = array(
'post_type' => 'events',
'posts_per_page' => 50,
'order' => 'ASC',
'orderby' => 'meta_value_num',
'meta_key' => 'start_date',
'meta_query' => array(
array(
'key' => 'start_date',
'value' => array($month_start_date, $month_end_date),
'type' => 'numeric',
'compare' => 'BETWEEN'
)
)
);
$events = new WP_Query($args);
所以,我正在寻找纯粹的MySQL解决方案。有什么帮助吗?
答案 0 :(得分:1)
我不能告诉你很多关于WP meta queries
的内容,但SQL中的WHERE
子句应涵盖所有四种类型的事件持续时间:
发生的事件
查询:
SELECT ... FROM ... WHERE
start_date BETWEEN month_start AND month_end
OR end_date BETWEEN month_start AND month_end
OR month_start BETWEEN start_date AND end_date
<小时/> 编辑:
的事件
查询;
SELECT ... FROM ... WHERE
WHERE start_date <= month_end
AND end_date >= month_start
如果不了解元查询内容(我的引用是this),您希望 的工作方式如下:
'meta_query' => array(
'relation' => 'AND', // default is AND
array(
'key' => 'start_date',
'value' => $month_end_date,
'type' => 'numeric',
'compare' => '<='
),
array(
'key' => 'end_date',
'value' => $month_start_date,
'type' => 'numeric',
'compare' => '>='
)
),