使用WP元查询按开始和结束日期显示自定义帖子类型

时间:2014-03-19 10:50:04

标签: mysql wordpress custom-post-type

我有一个名为 Events 的自定义帖子类型,以及一个显示一个月活动的页面。每个活动都有2个自定义字段start_datefinish_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);

1 个答案:

答案 0 :(得分:0)

我想您需要在ORmeta_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