WordPress的产品搜索中添加SKU(库存单位)关键词搜索功能

为了在WordPress的产品搜索中添加SKU(库存单位)关键词搜索功能,你需要对网站的搜索功能进行自定义。以下是一个基于WooCommerce插件的示例,展示了如何通过添加一段代码到你的WordPress网站的主题functions.php文件中,实现这一功能。这段代码会使得WooCommerce的产品搜索不仅能搜索产品标题和描述,还能搜索SKU。

请注意,编辑网站的代码时应该小心行事,建议在进行任何更改之前备份网站和数据库,并在子主题的functions.php文件中进行更改,以避免未来更新主题时丢失自定义代码。

/**
 * Enable SKU search for WooCommerce products.
 */
function wc_search_by_sku( $search ) {
    global $wpdb;
    // 不直接使用 $wp_query,因此从全局查询中获取搜索关键词。
    $terms = get_query_var( 's' );

    // 如果没有搜索关键词,则直接返回原始的搜索查询。
    if ( empty( $terms ) ) {
        return $search;
    }

    // 修改搜索查询以包括SKU。
    $search .= $wpdb->prepare( " OR EXISTS (
        SELECT 1
        FROM {$wpdb->postmeta} pm
        WHERE pm.post_id = {$wpdb->posts}.ID
        AND pm.meta_key = '_sku'
        AND pm.meta_value LIKE '%%%s%%' )", $terms );

    return $search;
}

// 检查 WooCommerce 是否激活,然后添加过滤器。
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    add_filter( 'posts_search', 'wc_search_by_sku', 10 );
}

请注意,这段代码直接使用get_query_var('s')来获取当前查询的搜索关键词,避免了直接操作$wp_query对象。同时,确保了add_filter的调用是标准的,避免了通过引用传递参数。

如果你仍然遇到问题,这可能与你的WordPress环境或其他自定义代码有关。确保你的环境是最新的,并考虑检查是否有其他插件或主题代码干扰了搜索过滤逻辑。在进行此类自定义时,测试和调试是关键步骤。

By 行政