Wordpress搜索meta_value即数组

时间:2015-12-22 15:15:52

标签: php wordpress

如果我使用数组作为元值,我可以在查询时看到数组中是否有值?我有一个网站,其中包含附加日期的事件作为元值,我需要通过搜索查看事件是否在特定日期。

$dates[] = 05/02/2016
$dates[] = 06/02/2016
$dates[] = 06/02/2016
update_post_meta($event, 'show_dates', $dates);

如果我将此添加到事件中,我如何检查'show_dates'是否包含搜索的日期?以下是我已经尝试过的

 $wp_query->set('post_status', array('publish', 'future'));
 $wp_query->set("meta_key", "show_dates");
 $wp_query->set("orderby", "meta_value");
 $wp_query->set("order", "ASC");

        $startDate = parseDatePicker($_GET['StartDate'], new \DateTime());

        if (!is_null($startDate)) {

            $wp_query->set("meta_query", array(
                array(
                    'key' => "show_dates",
                    'value' => $startDate->format("d/m/Y"),
                    'compare' => 'IN'
                )
            ));
        }

1 个答案:

答案 0 :(得分:1)

好的,事实证明这个答案比我想象的要容易。当Wordpress序列化数组中的数据时,您可以使用LIKE而不是IN来检查序列化数组,看它是否包含该日期。

 $wp_query->set('post_status', array('publish', 'future'));
 $wp_query->set("meta_key", "show_dates");
 $wp_query->set("orderby", "meta_value");
 $wp_query->set("order", "ASC");

    $startDate = parseDatePicker($_GET['StartDate'], new \DateTime());

    if (!is_null($startDate)) {

        $wp_query->set("meta_query", array(
            array(
                'key' => "show_dates",
                'value' => $startDate->format("d/m/Y"),
                'compare' => 'LIKE'
            )
        ));
    }

我的下一个问题是如何使用我设法解决这个问题的范围,并在下面发布了包含其他人有类似问题

if (!is_null($startDate) && !is_null($endDate) && ($startDate->format('d/m/Y') != $endDate->format('d/m/Y'))) {

            $wp_query->set("relation", "OR");

            $interval = DateInterval::createFromDateString('1 day');
            $period = new DatePeriod($startDate, $interval, $endDate);
            $dates[] = $startDate->format('d/m/Y');

            foreach($period as $day){

                $dates[] = array(
                    'key' => "next_showing_date",
                    'value' => $day->format('d/m/Y'),
                    'compare' => 'LIKE',
                );

            }

            $wp_query->set("meta_query", $dates);

        }