You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改WordPress商品自动补全搜索,仅匹配标题与SKU?

实现WooCommerce商品标题+SKU的自动补全搜索

问题说明

现有WooCommerce商品自动补全搜索代码,默认会匹配商品描述,但无法搜索SKU。尝试分别添加标题搜索和SKU搜索的代码后,仅标题搜索生效,无法同时实现标题+SKU的搜索需求。

修改后的完整代码

替换原有相关代码为以下内容:

1. 核心搜索逻辑(替换原有两个单独的search函数)

function awp_search_title_and_sku( $search, $wp_query ) {
    global $wpdb;

    // 仅对自动补全查询生效,避免影响全局搜索
    if ( ! isset( $wp_query->query_vars['awp_autocomplete'] ) || ! $wp_query->query_vars['awp_autocomplete'] ) {
        return $search;
    }

    if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) {
        $search_terms = $wp_query->query_vars['search_terms'];
        $n = ! empty( $wp_query->query_vars['exact'] ) ? '' : '%';

        // 构建标题搜索条件
        $title_conditions = [];
        foreach ( $search_terms as $term ) {
            $title_conditions[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n );
        }
        $title_search = implode( ' AND ', $title_conditions );

        // 构建SKU搜索条件
        $sku_conditions = [];
        foreach ( $search_terms as $term ) {
            $sku_conditions[] = $wpdb->prepare( "$wpdb->postmeta.meta_value LIKE %s", $n . $wpdb->esc_like( $term ) . $n );
        }
        $sku_search = implode( ' AND ', $sku_conditions );

        // 合并标题和SKU的搜索条件
        $combined_search = "($title_search) OR ($wpdb->postmeta.meta_key = '_sku' AND $sku_search)";

        // 未登录用户过滤密码保护商品
        if ( ! is_user_logged_in() ) {
            $combined_search .= " AND $wpdb->posts.post_password = ''";
        }

        $search = ' AND (' . $combined_search . ')';
    }

    return $search;
}
add_filter( 'posts_search', 'awp_search_title_and_sku', 10, 2 );

// 关联postmeta表用于SKU查询
function awp_join_postmeta_for_sku( $join, $wp_query ) {
    global $wpdb;
    if ( isset( $wp_query->query_vars['awp_autocomplete'] ) && $wp_query->query_vars['awp_autocomplete'] ) {
        $join .= " LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id";
    }
    return $join;
}
add_filter( 'posts_join', 'awp_join_postmeta_for_sku', 10, 2 );

// 避免重复搜索结果
function awp_distinct_results( $distinct, $wp_query ) {
    if ( isset( $wp_query->query_vars['awp_autocomplete'] ) && $wp_query->query_vars['awp_autocomplete'] ) {
        $distinct = 'DISTINCT';
    }
    return $distinct;
}
add_filter( 'posts_distinct', 'awp_distinct_results', 10, 2 );

2. 修改自动补全AJAX查询函数

更新awp_autocomplete_search函数,添加自定义标识确保仅对该查询应用新搜索逻辑:

function awp_autocomplete_search() {
    check_ajax_referer('autocompleteSearchNonce', 'security');

    $search_term = sanitize_text_field($_REQUEST['term']);
    if (empty($search_term)) {
        echo json_encode([]);
        wp_die();
    }

    $suggestions = [];

    // 商品查询参数,添加自定义标识
    $args = [
        'post_type' => 'product',
        'posts_per_page' => 10, // 限制结果数量优化性能
        's' => $search_term,
        'awp_autocomplete' => true, // 触发自定义搜索逻辑的标识
        'post_status' => 'publish',
    ];

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            global $product;

            $product_id = $product->get_id();
            $product_name = $product->get_name();
            $product_image_url = get_the_post_thumbnail_url($product_id, 'thumbnail');

            $suggestions[] = [
                'id' => $product_id,
                'label' => $product_name,
                'image' => $product_image_url,
                'link' => get_permalink($product_id),
            ];
        }
        wp_reset_postdata();
    }

    echo json_encode($suggestions);
    wp_die();
}

3. 保留前端脚本与样式加载

原有wp_enqueue_scripts和woocommerce_js函数无需修改,直接保留即可。

关键修改说明

  • 将标题、SKU搜索逻辑整合为一个函数,避免多个filter互相覆盖
  • 通过自定义查询参数awp_autocomplete,确保搜索逻辑仅作用于自动补全查询,不影响全局搜索
  • 手动关联postmeta表实现SKU查询,并添加DISTINCT避免重复结果
  • 限制查询结果数量,提升搜索响应速度

内容的提问来源于stack exchange,提问作者brc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:29:51