如何在WooCommerce中批量隐藏35美元价位产品或价格
WooCommerce 批量隐藏定价35美元产品实现方案
针对5000+量级的产品,无需逐个后台编辑,以下两种代码方案可直接使用,操作前请先备份站点数据库。
方案1:查询层自动过滤(不修改产品原始数据,性能最优)
该方案不会改动产品本身的发布状态、可见性配置,仅在前台产品列表、搜索结果的查询阶段直接排除定价35美元的产品,代码部署后即时生效,后续新增的同价位产品也会自动隐藏,适合需要灵活调整规则、不想改动原有产品数据的场景。
将以下代码添加到当前主题/子主题的functions.php文件,或通过代码片段插件插入即可:
// 前台WooCommerce产品列表排除35美元产品 add_action( 'woocommerce_product_query', 'custom_hide_35usd_products', 10, 2 ); function custom_hide_35usd_products( $query, $wc_query ) { $meta_query = $query->get( 'meta_query' ); $meta_query[] = [ 'key' => '_price', 'value' => 35, 'compare' => '!=', 'type' => 'NUMERIC' ]; $query->set( 'meta_query', $meta_query ); } // 全局搜索、普通页面查询中同步排除这类产品 add_action( 'pre_get_posts', 'custom_hide_35usd_products_global' ); function custom_hide_35usd_products_global( $query ) { if ( is_admin() || !$query->is_main_query() ) return; if ( $query->get('post_type') !== 'product' ) return; $meta_query = $query->get( 'meta_query' ); $meta_query[] = [ 'key' => '_price', 'value' => 35, 'compare' => '!=', 'type' => 'NUMERIC' ]; $query->set( 'meta_query', $meta_query ); }
注意:如果站点启用了多币种插件,请确认35美元对应数据库存储的实际价格数值,避免汇率换算导致过滤偏差;如果产品设置了促销价,_price字段存储的是当前生效的实际售价,促销价为35美元的产品也会被同步隐藏。
方案2:批量修改产品可见性(一次执行长期生效,无需保留代码)
该方案会直接将所有定价35美元的产品标记为「目录隐藏+搜索隐藏」状态,批量操作跑完后即可删除代码,不需要长期在站点挂载逻辑。
警告:该操作会修改产品的可见性配置,执行前必须完成数据库备份,避免误操作无法恢复。
操作步骤:
- 将以下代码临时添加到
functions.php文件中 - 以管理员身份登录站点,任意刷新一次前台页面,触发批量执行逻辑
- 确认所有目标产品已隐藏后,立刻删除刚才添加的代码,避免重复执行
// 一次性批量处理35美元产品,执行完成后请立即删除本段代码 add_action( 'wp_loaded', 'custom_batch_hide_35usd_products' ); function custom_batch_hide_35usd_products() { // 仅允许管理员触发该操作 if ( !current_user_can( 'manage_woocommerce' ) ) return; // 分批处理,每批1000个产品,避免一次性查询5000+产品导致内存溢出、请求超时 $page = 1; $batch_size = 1000; do { $product_ids = wc_get_products([ 'status' => 'publish', 'limit' => $batch_size, 'page' => $page, 'price' => 35, 'return' => 'ids', ]); foreach ( $product_ids as $pid ) { // 标记产品从目录、搜索中隐藏 wp_set_object_terms( $pid, 'exclude-from-catalog', 'product_visibility' ); wp_set_object_terms( $pid, 'exclude-from-search', 'product_visibility' ); // 清理对应产品缓存 wc_delete_product_transients( $pid ); } $page++; } while ( count($product_ids) === $batch_size ); }
如果后续需要恢复这批产品,只需要把代码中设置可见性的逻辑替换为移除对应隐藏标记,以同样的方式执行一次即可。
注意事项
- 不建议使用后台自带的批量编辑功能处理:WooCommerce后台默认批量编辑单次支持处理的产品数量上限很低,5000+产品手动翻页操作效率极差,还容易出现请求超时、处理中断的问题。
- 代码生效后如果仍能看到目标产品,请清空站点的页面缓存、对象缓存、CDN缓存后再刷新验证。
- 如果需要精确匹配35美元的正价产品、不隐藏同价位促销产品,可以将方案中查询的
_price字段替换为_regular_price即可。
内容的提问来源于stack exchange,提问作者Ali Hassan
相关产品推荐
相关产品推荐

