我为自定义字段值创建了一个AJAX post过滤器。这个过滤器呈现数据迭代JSON,也使用自定义内容模板。这段代码可以完美地用于自定义字段brand和值.
现在我面临的问题是在功能中添加多个元键,之后我将能够过滤多个自定义字段值。
如何在函数$args
中添加多个键和值
Function.php
add_action('wp_ajax_call_post', 'call_post');
add_action('wp_ajax_nopriv_call_post', 'call_post');
function call_post(){
$params = wp_parse_args ( $_REQUEST, array(
));
$brand = $params['mobile'];
$args = array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'brand',
'value' => $brand,
) ,
) ,
);
$query = new WP_Query($args);
if( ! empty ($params['template'])) {
$template = $params['template'];
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
get_template_part('content');
endwhile;
wp_reset_query();
else :
wp_send_json($query->posts);
endif;
die();
}
}
脚本
<script>
jQuery(document).ready(function () {
jQuery('.br').click(function () {
jQuery('.contents').remove();
var checked = jQuery('#test').serialize();
$('.filter-output').empty()
jQuery.ajax( {
url: "<?php echo admin_url('admin-ajax.php'); ?>",
data: "action=call_post&template=content&" + checked,
success: function (result) {
jQuery(result).appendTo('.filter-output');
}
});
})
});
</script>
Form.php
<form id='test' >
<input type="checkbox" name="mobile[]" value="Nokia" class="br"> NOKIA
<input type="checkbox" name="mobile[]" value="LG" class="br"> LG
<div class="filter-output">
</div>
</form>
是的,这很容易做到,使用第三个参数 'compare'
'meta_query'还包含一个或多个具有以下键的数组:
'key' (string)
——自定义字段密钥。
'value' (string|array)
-自定义字段值。只有当compare为'IN'、'NOT IN'、'BETWEEN'或'NOT BETWEEN'时,它才能是数组。在WordPress 3.9及以上版本中,当使用'EXISTS'或'NOT EXISTS'比较时,你不需要指定一个值。(注意:由于错误#23268,在3.9之前,NOT EXISTS比较需要value才能正常工作。必须为value参数提供一些字符串。空字符串或NULL将不起作用。然而,当使用NOT EXISTS时,任何其他字符串都可以做到这一点,并且不会出现在SQL中。需要灵感吗?"bug #23268"怎么样?
'compare' (string)
-待测试的操作符。可能的值是'=','!=', '>', '>=', '& lt; ', ' & lt; ="、"像"、"不喜欢"、"在"、"不是"、"之间"、"不"、"存在"answers"不存在"。默认值为"="。
'type' (string)
-自定义字段类型。可能的值是'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED'。默认值是'CHAR'。
'relation'
(string) -当有多个meta_query数组时,每个内部meta_query数组之间的逻辑关系。可能的值是'AND', 'OR'。不要与单个内部meta_query数组一起使用。
这里是一个可视化的例子,你可以使用 'relation'
参数…
$args = array(
'post_type' => 'post',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'brand',
'value' => $brand,
'compare' => '=',
),
array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => 'red',
'compare' => '=',
),
array(
'key' => 'size',
'value' => 'small',
'compare' => '=',
),
),
),
);
Reference: Class_Reference WP_Query - Custom Field Parameters