WP_Query meta_query日期范围包含2个自定义字段

for*_*nds 5 wordpress date-range

我有一个自定义帖子类型'events',其中包含start_date和end_date的自定义字段.我正在尝试制作即将发生的事件的简单列表.如果我只查询start_date> =今天的事件,它可以正常工作.如果我添加一个meta_query来说"AND"所有带有end_date <= today的事件 - 它不会返回任何内容.

我的自定义字段(start_date,end_date)存储为unix时间戳,这就是我使用'NUMERIC'和'meta_value_num'的原因.$ today是当前日期的时间戳.以下是我正在尝试做的例子...拔出我的头发 - 任何帮助将不胜感激!

这个工作:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),

    )
);
Run Code Online (Sandbox Code Playgroud)

当我为meta_query添加第二个数组时 - 不工作:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'NUMERIC',
        ),

    )
);
Run Code Online (Sandbox Code Playgroud)

当我在主查询中使用meta_compare时,以及一个meta_query - 不工作:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'meta_value_num' => $today,
    'meta_compare' => '>=',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'date',
        ),

    )
);
Run Code Online (Sandbox Code Playgroud)

当我在主查询中使用meta_compare和多个meta_queries时 - 不工作:

$args = array(  
    'post_type' => 'events',
    'posts_per_page' => -1,
    'meta_key' => 'start_date',
    'meta_value_num' => $today,
    'meta_compare' => '>=',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'start_date',
            'value' => $today,
            'compare' => '>=',
            'type' => 'NUMERIC',
        ),
        array(
            'key' => 'end_date',
            'value' => $today,
            'compare' => '<=',
            'type' => 'NUMERIC',
        ),

    )
);
Run Code Online (Sandbox Code Playgroud)

Ach*_*ika 6

这就是我使用它的方式,它对我来说很好.

$the_query = new WP_Query(array(
    'post_type' => 'job',
    'posts_per_page'   => 25,
    'meta_query' => array(
        array(
            'key' => 'published_date',
            'value' => array('20140401','20140405'),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        )
    )
));


if ($the_query->have_posts()) {

    echo '<ul>';
    while ($the_query->have_posts()) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';

} else {
    echo 'Sorry! No Posts';
}

wp_reset_postdata();
Run Code Online (Sandbox Code Playgroud)

关于手抄本的最重要的注意事项.

仅当日期以YYYYMMDD格式存储并使用此格式进行测试时,'type'DATE才会与'compare'值BETWEEN 一起使用.


小智 1

不确定您在尝试什么,但当您选择今天或将来开始的事件 (start_date >= $today) 并在今天或过去结束 (end_date <= $today) 时,不返回任何内容似乎是合乎逻辑的...