为了在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环境或其他自定义代码有关。确保你的环境是最新的,并考虑检查是否有其他插件或主题代码干扰了搜索过滤逻辑。在进行此类自定义时,测试和调试是关键步骤。