网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

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

GG网络技术分享 2025-03-18 16:12 3


问题描述:

I have a form that essentially filters a query for courses. The form has multiple options but lets take 2 of those, whether the course is open and its location. The query fully programmed looks like this:

$query = array(

\'post_type\' => \'courses\',

\'meta_query\' => array(

\'relation\' => \'AND\',

array(

\'key\' => \'course_location\',

\'compare\' => \'=\',

\'value\' => \'Birmingham\',

),

array(

\'key\' => \'course_open\',

\'compare\' => \'=\',

\'value\' => 1,

),

),

);

Now when I use the form this is the code I have...

Basic Start of query

 $query = array(

\'post_type\' => \'courses\',

);

Adding in location from form:

if(isset($_GET[\'location\']) && $_GET[\'location\'] != \'\') {       

$query[\'meta_query\'] = array(

\'relation\' => \'AND\',

array(

\'key\' => \'course_location\',

\'compare\' => \'=\',

\'value\' => $_GET[\'location\'],

),

);

}

Adding in if the course is open:

if(isset($_GET[\'open\']) && $_GET[\'open\'] != \'\') {       

$query[\'meta_query\'] = array(

\'relation\' => \'AND\',

array(

\'key\' => \'course_open\',

\'compare\' => \'=\',

\'value\' => $_GET[\'open\'],

),

);

}

The problem I have is the course open will replace the course locations in the query. If I just set one of the options it works perfectly I just need to keep adding to the query if its set in the form. Any idea how I would do this?

网友观点:

Solved it!

So I changed the Open code to:

if(isset($_GET[\'open\']) && $_GET[\'open\'] != \'\') {       

$open =

array(

\'key\' => \'course_open\',

\'compare\' => \'=\',

\'value\' => $_GET[\'open\'],

);

}

The Location to:

if(isset($_GET[\'location\']) && $_GET[\'location\'] != \'\') {       

$location = array(

\'key\' => \'course_location\',

\'compare\' => \'=\',

\'value\' => $_GET[\'location\'],

);

}

And the main query:

$query = array(

\'post_type\' => \'courses\',

\'meta_query\' => array(

\'relation\' => \'AND\',

$open,

$location,

),

);

###

Try below code :

$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

);

In your code, the mistake was when both the parameters passed one would overwrite the other one.

Hope this will help!

标签:

提交需求或反馈

Demand feedback