在AJAX post过滤器中添加多个元键和值


Add multiple meta key and value in AJAX post filter

我为自定义字段值创建了一个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