如何在WooCommerce后台实现多商品名称批量搜索?
可行!将多SKU批量搜索修改为商品名称批量搜索
完全可以把这段多SKU搜索代码修改为按商品名称批量搜索,核心是把针对SKU(自定义字段)的查询逻辑替换为针对商品标题(post_title)的查询逻辑。以下是修改后的代码,支持用逗号作为分隔符输入多个商品名称(也可自行修改分隔符):
/** * 在WooCommerce后台批量搜索多个商品(按商品名称) * 注:使用逗号作为名称分隔符,示例:"商品A,商品B,商品C" **/ function woo_multiple_product_name_search( $query_vars ) { global $typenow; global $pagenow; // 仅在商品列表页的搜索请求中生效 if ( 'product' === $typenow && isset( $_GET['s'] ) && 'edit.php' === $pagenow ) { $search_term = sanitize_text_field( $_GET['s'] ); // 如果搜索词里没有逗号,走默认搜索逻辑 if ( strpos( $search_term, ',' ) === false ) { return $query_vars; } // 拆分多个商品名称,去除首尾空格并过滤空值 $product_names = array_map( 'trim', explode( ',', $search_term ) ); $product_names = array_filter( $product_names ); if ( empty( $product_names ) ) { return $query_vars; } // 构建标题匹配条件,支持模糊匹配 $title_conditions = array(); foreach ( $product_names as $name ) { $title_conditions[] = $GLOBALS['wpdb']->prepare( "post_title LIKE %s", '%' . $GLOBALS['wpdb']->esc_like( $name ) . '%' ); } // 查询符合条件的商品ID $post_ids = $GLOBALS['wpdb']->get_col( "SELECT ID FROM {$GLOBALS['wpdb']->posts} WHERE post_type = 'product' AND post_status = 'publish' AND (" . implode( ' OR ', $title_conditions ) . ")" ); if ( empty( $post_ids ) ) { return $query_vars; } // 将找到的商品ID传入查询变量,覆盖默认搜索结果 $query_vars['post__in'] = $post_ids; $query_vars['s'] = ''; // 清空原搜索词,避免默认搜索干扰 } return $query_vars; } add_filter( 'request', 'woo_multiple_product_name_search', 20 );
关键修改说明:
- 分隔符调整:将原代码的
|替换为逗号(符合需求中的分隔符偏好),若需要其他分隔符,只需修改strpos和explode中的符号即可。 - 查询逻辑替换:去掉了针对SKU自定义字段的
meta_query,改为直接查询wp_posts表中的post_title字段,更适配商品名称搜索场景。 - 匹配规则可选:当前代码用
LIKE做模糊匹配(包含关键词即命中),如果需要精确匹配商品名称,可将LIKE %s改为= %s,并去掉前后的%通配符。 - 空值过滤:增加了对拆分后空名称的过滤,避免无效查询。
使用方法:
在WooCommerce后台的商品列表搜索框中,输入用逗号分隔的商品名称即可批量搜索,例如:纯棉T恤,休闲牛仔裤,运动跑鞋。
内容的提问来源于stack exchange,提问作者LET DesignWorks
相关产品推荐
相关产品推荐

