WP查询搜索过滤

时间:2018-11-27 10:07:02

标签: php wordpress

我创建了一个函数,该函数允许用户在搜索栏中输入WooCommerce产品名称,然后检索包含相同名称的产品。但我希望用户也能够输入产品SKU并检索产品。但是查询中的搜索参数似乎仅适用于产品标题。

我想尽可能快地保持此功能。在查询中使用搜索参数之前,我有一个if语句,该语句环绕在数组中,如果标题与搜索到的文本匹配,它将被添加到数组中,但这会导致它花费更长的时间,因为它将遍历每个数组。产品。

那么我该如何做,以便用户还可以按产品SKU进行搜索,同时又要尽可能缩短加载时间?

这是我的代码;

functions.php

add_action('wp_ajax_search_bar', 'search_func');
add_action('wp_ajax_nopriv_search_bar', 'search_func');

function search_func(){

    $searchq = $_GET['search'];
    // $searchq = preg_replace("#^[0-9a-z]#", "", $searchq);

    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        's' =>  $searchq,
        'tax_query' => array(
            array(
                'taxonomy' => 'product_visibility',
                'field'    => 'name',
                'terms'    => 'exclude-from-catalog',
                'operator' => 'NOT IN',
            ),

        ),
    );

    $query = new WP_Query( $args ); 

    if( $query->have_posts() ){
        $result = array();

        while( $query->have_posts() ){
            $query->the_post();

            $title = get_the_title();
            $permalink = get_the_permalink();
            $product = wc_get_product(get_the_ID());
            $sku = $product->get_sku();

            $result[] = array(
                'title'     => $title,
                'permalink' => $permalink,
                'sku'       => $sku,
            );
        } 

        echo json_encode($result);
        wp_reset_postdata();
        wp_die();
    }
}

search.php

<form action="" method="POST" id="search_form">
    <input type="text" name="search" />
    <input type="submit" value="Search" />
    <input type="hidden" name="action" value="search_bar">
</form>

<div id="search_results"></div>

ajax_search.js

jQuery(function($){
    $('#search_form').submit(function(e){
        e.preventDefault();
        $('#search_results').empty();

        var filter = $('#search_form');
        var root_dir = document.location.origin;

        $.ajax({
            url: ajax.ajax_url,
            data: filter.serializeArray(), // form data
            dataType: 'json',
            beforeSend:function(xhr){

            },
            success:function(response){
                for(var i = 0; i < response.length; i++){
                   var html = '<div><p>' + response[i].title + '</p><p>' + response[i].permalink + '</p><p>' + response[i].sku + '</p></div>';

                    $('#search_results').append(html);
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){

            } 
        });
    });
});

0 个答案:

没有答案