2016-08-19 72 views
3

我为自定义字段值创建了AJAX后期过滤器。此筛选器呈现数据迭代JSON并使用自定义内容模板。而对于自定义字段品牌此代码的工作非常有 ..在AJAX后期过滤器中添加多个元键和值

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

如何在函数$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> 

回答

2

是的,它可以很容易地做到这一点,使用第三个参数'compare'

'meta_query' 还包含一个或多个阵列使用下列按键:

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

'value' (string|array) - 自定义字段值。只有在比较为“IN”,“NOT IN”,“BETWEEN”或“NOT BETWEEN”时,它才可以是数组。在WordPress 3.9及更高版本中使用“EXISTS”或“NOT EXISTS”比较时,您不必指定值。
注意:由于错误#23268,NOT EXISTS比较需要的值才能在3.9之前正确工作,您必须为value参数提供一些字符串,空字符串或NULL将不起作用。其他字符串会做的伎俩,并使用NOT EXISTS当你的SQL将不会出现需要灵感如何“BUG#23268”)

'compare' (string) - ?运营商进行测试。可能的值是'=','!=','>','> =','<','< =','LIKE','不像','进','不进','间隔','不存在','存在'和'不存在'。默认值是'='。

'type' (string) - 自定义字段类型。可能的值有'NUMERIC','BINARY','CHAR','DATE','DATETIME','DECIMAL','SIGNED','TIME','UNSIGNED'。默认值是'CHAR'。


'relation'(字符串) - 每个内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' => '=', 
      ), 
     ), 
    ), 
); 

参考:Class_Reference WP_Query - Custom Field Parameters

+0

如何使用 '$品牌= $ PARAMS [' 移动'];'对于每个密钥 – FRQ6692

+0

您可以使用像'key'=> $ variable'这样的变量替换''key''这样的任何参数,并且可以替换''value''。这是有效的,我已经在使用它......但“关系”和“比较”参数对于获得你想要的东西很重要。这就像一个SQL查询... – LoicTheAztec

相关问题