Wordpress - 基于表单输入添加查询

时间:2017-11-20 10:59:54

标签: php wordpress forms

我有一个基本上过滤课程查询的表单。表单有多个选项,但无论课程是否开放及其位置,我们都可以选择其中的2个。完全编程的查询如下所示:

$query = array(
        'post_type' => 'courses',
            'meta_query' => array(
                'relation' => 'AND',
                    array(
                        'key' => 'course_location',
                        'compare' => '=',
                        'value' => 'Birmingham',
                    ),
                    array(
                        'key' => 'course_open',
                        'compare' => '=',
                        'value' => 1,
                    ),
            ),
        );

现在,当我使用表格时,这就是我的代码......

基本的查询开始

 $query = array(
     'post_type' => 'courses',
 );

从表单添加位置:

if(isset($_GET['location']) && $_GET['location'] != '') {       
    $query['meta_query'] = array(
        'relation' => 'AND',
             array(
                'key' => 'course_location',
                'compare' => '=',
                'value' => $_GET['location'],
             ),
    );  
}

如果课程开放则加入:

if(isset($_GET['open']) && $_GET['open'] != '') {       
    $query['meta_query'] = array(
        'relation' => 'AND',
            array(
                'key' => 'course_open',
                'compare' => '=',
                'value' => $_GET['open'],
            ),
    );  
}

我遇到的问题是课程打开将替换查询中的课程位置。如果我只设置其中一个选项它完美地工作,我只需要继续添加查询,如果它在表单中设置。知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

解决了!

所以我将Open代码更改为:

if(isset($_GET['open']) && $_GET['open'] != '') {       
    $open =
        array(
            'key' => 'course_open',
            'compare' => '=',
            'value' => $_GET['open'],
    );                      
}

位置:

if(isset($_GET['location']) && $_GET['location'] != '') {       
        $location = array(
            'key' => 'course_location',
            'compare' => '=',
            'value' => $_GET['location'],
        );              
 }

主要查询:

$query = array(
     'post_type' => 'courses',
         'meta_query' => array(
            'relation' => 'AND',
             $open,
             $location,
          ),
);

答案 1 :(得分:0)

尝试以下代码:

$meta_query=array();
$meta_query['relation'] = 'AND';
if(isset($_GET['location']) && $_GET['location'] != '') {
    $temp_arr             =   array();
    $temp_arr['key']      =   'course_location';
    $temp_arr['value']    =   $_GET['location'];
    $temp_arr['compare']  =   '='; 
    $meta_query[]         =   $temp_arr;
}
if(isset($_GET['open']) && $_GET['open'] != '') {
    $temp_arr             =   array();
    $temp_arr['key']      =   'course_open';
    $temp_arr['value']    =   $_GET['open'];
    $temp_arr['compare']  =   '='; 
    $meta_query[]         =   $temp_arr;
}
$args = array(
                'post_type'        => 'post_type',
                'meta_query'       => $meta_query
              );

在你的代码中,错误是当两个传递的参数都会覆盖另一个参数时。

希望这会有所帮助!