WooCommerce:在特定分类中显示缺货商品(覆盖全局设置)

霞舞
发布: 2025-11-03 11:35:39
原创
147人浏览过

WooCommerce:在特定分类中显示缺货商品(覆盖全局设置)

本教程将指导您如何在woocommerce中,即便全局设置已隐藏所有缺货商品,也能在特定的产品分类页面中例外显示这些商品。通过利用wordpress的`pre_option_woocommerce_hide_out_of_stock_items`过滤器,您可以精确控制缺货商品的可见性,实现更灵活的库存管理和商品展示策略。

在WooCommerce商店运营中,为了提升用户体验并避免用户购买无法发货的商品,我们通常会在WooCommerce的库存设置中启用“缺货商品在目录中隐藏”选项。然而,在某些特定的营销场景或业务需求下,您可能希望在某些特定的商品分类页面中,即使商品处于缺货状态,也能将其展示出来。例如,预售商品、即将补货的商品,或者作为产品系列的一部分,即使缺货也需要展示其存在。本文将详细介绍如何通过代码实现这一高级功能,覆盖全局设置,在指定分类中显示缺货商品。

理解WooCommerce的缺货商品隐藏机制

WooCommerce提供了一个全局设置,允许商店管理员选择是否在商店目录和搜索结果中隐藏缺货商品。这个设置通常位于 WooCommerce youjiankuohaophpcn 设置 > 商品 > 库存 选项卡中。当此选项被勾选时,所有库存为零的商品将不会出现在任何分类列表、商店页面或搜索结果中。

我们的目标是创建一个例外规则,当用户浏览到某个特定的商品分类时,即使全局设置已启用隐藏缺货商品,该分类下的缺货商品也能被正常显示。

核心解决方案:利用WordPress过滤器

WordPress和WooCommerce的强大之处在于其丰富的钩子(hooks)和过滤器(filters)机制。我们可以利用 pre_option_woocommerce_hide_out_of_stock_items 这个过滤器来拦截并修改WooCommerce在查询商品时对“是否隐藏缺货商品”这一设置的判断。

当WordPress或WooCommerce尝试获取 woocommerce_hide_out_of_stock_items 这个选项的值时,pre_option_woocommerce_hide_out_of_stock_items 过滤器会被触发。我们可以在这个过滤器中编写自定义逻辑,判断当前是否处于我们希望显示缺货商品的特定分类页面。如果是,我们就强制将该选项的值设置为“不隐藏”(即 no),从而覆盖全局设置。

代码实现

将以下代码添加到您的WordPress子主题的 functions.php 文件中,或者通过自定义插件来管理。强烈建议使用子主题或自定义插件,以避免主题更新时代码丢失。

/**
 * WooCommerce:在特定分类中显示缺货商品,覆盖全局设置
 *
 * 当浏览到指定分类时,强制显示缺货商品。
 * 替换 'specific-category' 为您希望显示缺货商品的分类别名(slug)。
 */
add_filter( 'pre_option_woocommerce_hide_out_of_stock_items', 'custom_display_out_of_stock_exception_category' );

function custom_display_out_of_stock_exception_category( $hide_out_of_stock ) {
    // 检查当前页面是否为产品分类页面,并且是指定的分类
    // 请将 'specific-category' 替换为您实际的分类别名(slug)
    if ( is_product_category( 'specific-category' ) ) {
        // 如果是指定分类,则强制设置为“不隐藏”缺货商品
        $hide_out_of_stock = 'no';
    }   
    return $hide_out_of_stock;
}
登录后复制

代码解析

  1. add_filter( 'pre_option_woocommerce_hide_out_of_stock_items', 'custom_display_out_of_stock_exception_category' );

    万彩商图
    万彩商图

    专为电商打造的AI商拍工具,快速生成多样化的高质量商品图和模特图,助力商家节省成本,解决素材生产难、产图速度慢、场地设备拍摄等问题。

    万彩商图 57
    查看详情 万彩商图
    • add_filter() 是WordPress用于挂载过滤器的函数。
    • pre_option_woocommerce_hide_out_of_stock_items 是我们关注的过滤器名称。它在WooCommerce尝试获取 woocommerce_hide_out_of_stock_items 选项的值之前被触发。
    • custom_display_out_of_stock_exception_category 是我们自定义的回调函数,用于处理过滤器的逻辑。
  2. function custom_display_out_of_stock_exception_category( $hide_out_of_stock ) { ... }

    • 这是我们的自定义函数,它接收一个参数 $hide_out_of_stock,这个参数是WooCommerce全局设置中“是否隐藏缺货商品”的当前值(yes 表示隐藏,no 表示不隐藏)。
  3. if ( is_product_category( 'specific-category' ) ) { ... }

    • is_product_category() 是WooCommerce提供的一个条件标签,用于判断当前页面是否为指定的产品分类归档页。
    • 重要提示: 请将 'specific-category' 替换为您希望显示缺货商品的实际分类别名(slug)。分类别名通常是分类名称的小写、连字符分隔版本。您可以在 商品 > 分类 页面编辑分类时找到它。
    • 如果您需要针对多个分类应用此规则,可以传递一个分类别名数组,例如:is_product_category( array( 'category-slug-1', 'category-slug-2' ) )。
  4. $hide_out_of_stock = 'no';

    • 如果当前页面是指定的分类页面,我们将 $hide_out_of_stock 的值修改为 'no'。这意味着我们告诉WooCommerce:对于这个页面,请“不要隐藏”缺货商品。
  5. return $hide_out_of_stock;

    • 最后,函数返回 $hide_out_of_stock 的值。如果当前页面不是指定分类,它将返回原始的全局设置值;如果是指定分类,它将返回我们修改后的 'no'。

注意事项

  • 分类别名(Slug): 务必使用正确的分类别名(slug),而不是分类名称或ID。别名是URL中通常显示的那部分。
  • 子主题或自定义插件: 始终将自定义代码放置在子主题的 functions.php 文件中,或创建一个专门的自定义插件。直接修改父主题文件会导致更新时代码丢失。
  • 缓存: 在应用此代码后,如果您的网站使用了页面缓存插件(如WP Super Cache, W3 Total Cache, LiteSpeed Cache等),请务必清除所有缓存,以确保更改生效。
  • 测试: 在生产环境中部署之前,务必在开发或测试环境中充分测试此功能。
  • 用户体验: 尽管您选择了显示缺货商品,但仍建议在商品详情页清晰地标注商品为“缺货”状态,并提供预购、到货通知等选项,以优化用户体验。

总结

通过利用 pre_option_woocommerce_hide_out_of_stock_items 过滤器,我们成功地为WooCommerce的缺货商品显示设置创建了一个强大的例外机制。这使得商店管理员能够更灵活地管理商品展示策略,在保持全局设置整洁的同时,也能满足特定营销和业务需求,在指定分类中展示缺货商品。掌握这种利用WordPress过滤器覆盖默认行为的技巧,对于任何WooCommerce开发者或高级用户来说都至关重要。

以上就是WooCommerce:在特定分类中显示缺货商品(覆盖全局设置)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号