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

问题描述 投票:4回答:4

我有一个自定义帖子类型'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',
        ),

    )
);

当我为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',
        ),

    )
);

当我在主查询中使用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',
        ),

    )
);

当我在主查询中使用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',
        ),

    )
);
wordpress date-range
4个回答
5
投票

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

$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();

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

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


3
投票

这是我最终做的事情:

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


    )
)

这将获得当前月份的活动。我输入了月份的第一分钟,月份的最后一分钟和昨天的“昨天”的变量,即昨天的11:59:59。


0
投票

不确定你在尝试什么但似乎没有任何回报,因为你正在选择今天或未来开始的事件(start_date> = $ today)并且今天或过去结束(end_date <= $ today)...


0
投票

Alexandru-Florentin Popescu是对的!使用您的代码如下:

$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',
    ),

));

您只需在两个数组中更改键'compare'

© www.soinside.com 2019 - 2024. All rights reserved.