使用meta_query搜索确切的日期范围


Exact date range search using meta_query

我在wordpress网站上有一个日期范围搜索工具,可以帮助查找在特定时间范围内发生的事件。我正在使用ACF pro的中继器在事件帖子中列出日期。日期范围工具可以正确提取事件发生在日期范围内的事件,但它也包括日期范围内未列出日期但第一个和最后一个日期位于日期范围两侧的事件。

我需要找到一个解决方案,这意味着如果事件在范围内具有严格的日期,则只有事件才会显示在日期范围搜索中。

这是我正在使用的循环/meta_query:

<?php  // filter
function my_posts_where( $where ) {
$where = str_replace("meta_key = 'showings_%", "meta_key LIKE 'showings_%", $where);
return $where;
}
add_filter('posts_where', 'my_posts_where');
  $_sda = $_GET['sda'] != '' ? $_GET['sda'] : '';
  $_smo = $_GET['smo'] != '' ? $_GET['smo'] : '';
  $_syr = $_GET['syr'] != '' ? $_GET['syr'] : '';
  $startd = $_syr.$_smo.$_sda.'0000';
  $_eda = $_GET['eda'] != '' ? $_GET['eda'] : '';
  $_emo = $_GET['emo'] != '' ? $_GET['emo'] : '';
  $_eyr = $_GET['eyr'] != '' ? $_GET['eyr'] : '';
    $endd = $_eyr.$_emo.$_eda.'2359';
    $meta_query = array(
                        'posts_per_page'    => -1,
                        'post_type'     => 'events',
                        'meta_key'      => 'showings_%_show_when',
                        'orderby'   => 'meta_value',
                        'order' => 'ASC',
                        'meta_query' => array(
                            'relation' => 'BETWEEN',
                            array(
                                'key'       => 'showings_%_show_when',
                                'value'     => $startd,
                                'compare'   => '>=',
                                'type'      => 'NUMERIC'
                            ),
                            array(
                                'key'       => 'showings_%_show_when',
                                'value'     => $endd,
                                'compare'   => '<=',
                                'type'      => 'NUMERIC'
                            )
                        )
                    );
    // query
    $the_query = new WP_Query( $meta_query ); ?>

我希望这是足够的信息可以继续下去。如果有帮助,这里有一个活生生的例子。

错误显示的事件是 LegaC 和 MyMoves,事件本身不会在此时间段内发生。

非常感谢,

此问题已通过重新起草查询得到解决。看这里:

$meta_query = array(
                        'posts_per_page'    => -1,
                        'post_type'     => 'events',
                        'orderby'   => 'meta_value',
                        'order' => 'ASC',
                        'meta_query' => array(
                            'relation' => 'AND',
                            array(
                                'key' => 'showings_%_show_when',
                                'value' => array( $startd, $endd ),
                                'type' => 'NUMERICAL',
                                'compare' => 'BETWEEN'
                            )
                        )
                    );