如何在WordPress中隐藏WooCommerce最新、畅销商品列表的缺货产品
实现方案
你现有的代码逻辑是通过在指定模板渲染前后临时开启「隐藏缺货商品」的全局配置实现的,只需要调整模板名称的判断规则,把最新、畅销商品对应的模板也加入匹配范围即可。
默认情况下WooCommerce最新上架、畅销商品板块对应的模板路径如下,如果你的主题有自定义模板,可以自行调整匹配项:
- 通用商品循环模板:
content-product.php(多数主题的最新、畅销商品会复用这个模板) - 自定义最新商品模板:
loop/product-new.php - 自定义畅销商品模板:
loop/product-best-seller.php
提示:代码请放在子主题的
functions.php文件中,或使用Code Snippets这类代码管理插件添加,避免主题更新后代码丢失。
扩展后的完整代码
function hide_out_of_stock_option( $option ){ return 'yes'; } add_action( 'woocommerce_before_template_part', function( $template_name ) { // 需要隐藏缺货商品的所有模板路径,可根据自己的主题实际情况增删 $target_templates = [ "single-product/related.php", "content-product.php", "loop/product-new.php", "loop/product-best-seller.php" ]; if( !in_array( $template_name, $target_templates ) ) { return; } add_filter( 'pre_option_woocommerce_hide_out_of_stock_items', 'hide_out_of_stock_option' ); } ); add_action( 'woocommerce_after_template_part', function( $template_name ) { $target_templates = [ "single-product/related.php", "content-product.php", "loop/product-new.php", "loop/product-best-seller.php" ]; if( !in_array( $template_name, $target_templates ) ) { return; } remove_filter( 'pre_option_woocommerce_hide_out_of_stock_items', 'hide_out_of_stock_option' ); } );
自定义主题适配方案
如果上述代码不生效,说明你的主题用了特殊的模板调用方式或者用区块/短代码渲染最新、畅销商品,可以直接用商品查询钩子实现隐藏,不需要判断模板:
add_action( 'woocommerce_product_query', function( $q ) { // 排除后台请求和商品详情页的查询 if( is_admin() || is_product() ) return; $q->set( 'meta_query', array_merge( $q->get( 'meta_query' ) ?: [], [ [ 'key' => '_stock_status', 'value' => 'outofstock', 'compare' => 'NOT IN' ] ] ) ); } );
内容的提问来源于stack exchange,提问作者oldjoker
相关产品推荐
相关产品推荐

