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

时间:2016-03-05 11:50:04

标签: php mysql wordpress loops advanced-custom-fields

我在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 ); ?>

我希望这是足够的信息继续下去。如果它有帮助,这是一个live example

出现错误的事件是LegaC和MyMoves - 事件本身在此期间不会发生。

非常感谢,

1 个答案:

答案 0 :(得分:1)

通过稍微重新绘制查询解决了这个问题。见这里:

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