使用包含空格的短语搜索自定义字段时,WP_Query会中断

时间:2018-04-18 01:17:23

标签: php wordpress custom-fields

我根据用户从自定义字段列表中选择的内容过滤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()处理时,从服务器返回任何内容。我不知道我在这里可能会忽略什么。

2 个答案:

答案 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 );