我有一个名为 Events 的自定义帖子类型,以及一个显示一个月活动的页面。每个活动都有2个自定义字段start_date
和finish_date
,其中日期存储为yymmdd
。
如果某个事件超过两个月,则仅出现在开始日期的月份。我也坚持如何在完成日期的月份展示它。例如,如果我的开始日期为19/03/2014并且完成日期为19/04/2013,那么它应该出现在3月和4月。
我正在使用此代码:
// 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);
答案 0 :(得分:0)
我想您需要在OR
中meta_query
检查start_date
是否在所选月份 或 end_date
位于所选月份...
尝试这样的事情:
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'start_date',
'value' => array( $month_start_date, $month_end_date ),
'type' => 'NUMERIC',
'compare' => 'BETWEEN'
),
array(
'key' => 'finish_date',
'value' => array( $month_start_date, $month_end_date ),
'type' => 'NUMERIC',
'compare' => 'BETWEEN'
),
)
查看WP Codex以获取更多详细信息:/Class_Reference/WP_Query#Custom_Field_Parameters