我根据用户从自定义字段列表中选择的内容过滤Wordpress CPT。当自定义字段不包含空格但在包含空格时它不返回任何内容时,它工作正常。
我已尝试过所有可能的比较选项(" LIKE"," IN"等)。
动态创建选择列表并输出以下内容。
<form class="cd-new-brews-table-filter" method="GET">
<select id="beer-style" name="beer-style">
<option value="0">Any Style</option>
<option value="Cider">Cider</option>
<option value="IPA">IPA</option>
<option value="Lager">Lager</option>
<option value="Pale Ale">Pale Ale</option>
<option value="Pilsner">Pilsner</option>
<option value="Porter">Porter</option>
<option value="Stout">Stout</option>
</select>
<input type="button" id="submit-filter" class="submit button" value="Filter" />
</form>
所选值将发送到脚本,以便在页面上处理和加载内容...
jQuery(document).ready(function($){
$('body').on('click','#submit-filter',function(e){
e.preventDefault();
var beer_style = $('#beer-style').val();
console.log(beer_style + ' filter submitted.');
$( "#cd_keg_sales_table" ).html('<img class="ajax-loader" src="../wp-content/themes/Divi-child/ajax-loader.gif" alt="Loading..." /></div>');
$( "#cd_keg_sales_table" ).load( "../wp-content/themes/Divi-child/ajax/default.php?beer-style=" + beer_style, function() {
console.log('jQ load() completed.');
});
});
});
default.php在服务器上触发,每次都成功返回浏览器。除非所选选项包含类似&#34; Pale Ale&#34;。
的空格$filters = array();
$beer_style_filter = $_GET['beer-style'];
if ( isset($beer_style_filter) && $beer_style_filter != '0' ) {
array_push($filters, array('key' => 'beer_style','value' => $beer_style_filter,'compare' => '='));
}
$keg_sales_args = array(
'posts_per_page' => -1,
'post_type' => 'beer',
'orderby' => 'title',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'beer_hide_in_keg_sales',
'value' => '"yes"',
'compare' => 'NOT LIKE'
),
$filters,
),
);
$query_keg_sales = new WP_Query( $keg_sales_args );
我希望搜索&#34; Pale Ale&#34;但当$ beer_style_filter变量包含空格并由array_push()处理时,从服务器返回任何内容。我不知道我在这里可能会忽略什么。
答案 0 :(得分:1)
如果自定义值包含空格,则只需用下划线替换空格
<option value="Pale_Ale">Pale Ale</option>
之后在php中用空格替换下划线.. 只需复制并粘贴以下代码即可。
filters = array();
$beer_style_filter = $_GET['beer-style'];
$beer_style_filter = str_replace('_',' ',$beer_style_filter);
if ( isset($beer_style_filter) && $beer_style_filter != '0' ) {
array_push($filters, array('key' => 'beer_style','value' => "$beer_style_filter",
'compare' => '='));
}
$keg_sales_args = array(
'posts_per_page' => -1,
'post_type' => 'beer',
'orderby' => 'title',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND', array(
'key' => 'beer_hide_in_keg_sales',
'value' => '"yes"',
'compare' => 'NOT LIKE' ), $filters, ),
);
$query_keg_sales = new WP_Query( $keg_sales_args );
答案 1 :(得分:0)
您正在将数组推入$filters
数组,但您只需要一个数组而不是数组数组。
试试这段代码
$filters = array();
$beer_style_filter = $_GET['beer-style'];
if ( isset($beer_style_filter) && $beer_style_filter != '0' ) {
$filters = array(
'key' => 'beer_style',
'value' => $beer_style_filter,
'compare' => '='
);
}
$keg_sales_args = array(
'posts_per_page' => -1,
'post_type' => 'beer',
'orderby' => 'title',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'beer_hide_in_keg_sales',
'value' => '"yes"',
'compare' => 'NOT LIKE'
),
$filters,
),
);
$query_keg_sales = new WP_Query( $keg_sales_args );