我创建了一个函数,该函数允许用户在搜索栏中输入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){
}
});
});
});