在 AJAX 后置过滤器中添加多个元键和值
Posted
技术标签:
【中文标题】在 AJAX 后置过滤器中添加多个元键和值【英文标题】:Add multiple meta key and value in AJAX post filter 【发布时间】:2016-12-26 13:27:56 【问题描述】:我为自定义字段值创建了一个 AJAX 后置过滤器。此过滤器渲染数据迭代 JSON 并使用自定义内容模板。这段代码非常适合自定义字段 brand 和 values..
现在我面临在函数中添加多个元键的问题,之后我将能够过滤多个自定义字段值。
如何在函数$args
中添加多个key和value?
函数.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>
【问题讨论】:
【参考方案1】:是的,使用第三个参数 '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 参数提供一些字符串。空字符串或 NULL 将不起作用。但是,任何其他字符串都可以解决问题,并且不会出现在您的 SQL 中使用 NOT EXISTS。需要灵感吗?'bug #23268' 怎么样。)
'compare' (string)
- 操作员进行测试。可能的值是 '='、'!='、'>'、'>='、'
'type' (string)
- 自定义字段类型。可能的值为“NUMERIC”、“BINARY”、“CHAR”、“DATE”、“DATETIME”、“DECIMAL”、“SIGNED”、“TIME”、“UNSIGNED”。默认值为“CHAR”。
'relation'
(string) - 存在多个时每个内部 meta_query 数组之间的逻辑关系。可能的值是“与”、“或”。不要与单个内部 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' => '=',
),
),
),
);
参考:Class_Reference WP_Query - Custom Field Parameters
【讨论】:
如何使用'$brand = $params['mobile'];'每个键 你可以用像'key' => $variable
这样的变量替换像'key'
这样的任何参数,'value'
也是一样的。这行得通,我已经用过了……但是'relation'
和'compare'
参数对于得到你想要的很重要。这就像一个 SQL 查询......以上是关于在 AJAX 后置过滤器中添加多个元键和值的主要内容,如果未能解决你的问题,请参考以下文章