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

时间:2016-08-19 11:38:37

标签: php jquery html ajax wordpress

我为自定义字段值创建了一个AJAX后置过滤器。此过滤器呈现迭代JSON的数据,并使用自定义内容模板。此代码适用于自定义字段品牌以及 ..

现在我面临着在功能中添加多个元键的问题,之后我将能够过滤多个自定义字段值。

如何在功能$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>

1 个答案:

答案 0 :(得分:2)

是的,可以使用第三个参数 'compare' 轻松完成。

  

<强>&#39; meta_query&#39;还包含一个或多个具有以下键的数组:

     

'key' (string) - 自定义字段键。

     

'value' (string|array) - 自定义字段值。只有当比较是&#39; IN&#39;,&#39; NOT IN&#39;,&#39; BETWEEN&#39;或者&#39; NOT BETWEEN&#39;时,它才可以是数组。使用&#39; EXISTS&#39;时,您不必指定值。或者&#39; NOT EXISTS&#39; WordPress 3.9及以上的比较。
  注意:由于错误#23268,NOT EXISTS比较需要在3.9之前正常工作的值。您必须为value参数提供一些字符串。空字符串或NULL不会但是,任何其他字符串都可以解决问题,并且在使用NOT EXISTS时不会出现在SQL中。需要灵感吗?#23268&#39; bug怎么样。)

     

'compare' (string) - 要测试的操作员。可能的值包括&#39; =&#39;,&#39;!=&#39;,&#39;&gt;&#39;,&#39;&gt; =&#39;,&#39 ;&lt;&#;&#39;&lt; =&#39;,&#39; LIKE&#39;,&#39; NOT LIKE&#39;,&#39; IN&#39;,&# 39;不在&#39;,&#39;之间&#39;,&#39;不在&#39;,&#39; EXISTS&#39;并且“不存在”#39;默认值为&#39; =&#39;。

     

'type' (string) - 自定义字段类型。可能的值包括“数字&#39;”,“&#39; BINARY&#39;&#39; CHAR&#39;&#39; DATE&#39;,&#39; DATETIME&#39;,&# 39; DECIMAL&#39;,&#39; SIGNED&#39;,&#39; TIME&#39;,#39; UNSIGNED&#39;。默认值为&#39; CHAR&#39;。

  

'relation' (字符串) - 每个内部meta_query数组之间存在多个逻辑关系。可能的值是&#39; AND&#39;,&#39; OR&#39;。不要使用单个内部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