”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 WooCommerce 4+ 中将自定义库存状态添加到 WooCommerce 产品?

如何在 WooCommerce 4+ 中将自定义库存状态添加到 WooCommerce 产品?

发布于2024-11-18
浏览:835

How to Add Custom Stock Statuses to WooCommerce Products in WooCommerce 4 ?

WooCommerce 4 中 WooCommerce 产品的自定义库存状态

向 WooCommerce 4 中的产品添加自定义库存状态是一个相对简单的过程。但需要修改具体功能,才能保证前后端正确显示状态。

添加自定义库存状态

添加自定义库存状态,添加将以下代码添加到您的functions.php文件中:

function filter_woocommerce_product_stock_status_options( $status ) {
    // Add new statuses
    $status['pre_order'] = __('Pre Order', 'woocommerce');
    $status['contact_us'] = __('Contact us', 'woocommerce');

    return $status;
}
add_filter( 'woocommerce_product_stock_status_options', 'filter_woocommerce_product_stock_status_options', 10, 1 );

此代码添加了两个新状态:“预购”和“联系我们”。

显示自定义库存可用性

确保自定义状态在前端正确显示,请应用以下更改:

// Availability text
function filter_woocommerce_get_availability_text( $availability, $product ) {
    // Get stock status
    switch( $product->get_stock_status() ) {
        case 'pre_order':
            $availability = __( 'Pre Order', 'woocommerce' );
            break;
        case 'contact_us':
            $availability = __( 'Contact us', 'woocommerce' );
            break;
    }

    return $availability;
}
add_filter( 'woocommerce_get_availability_text', 'filter_woocommerce_get_availability_text', 10, 2 );

// Availability CSS class
function filter_woocommerce_get_availability_class( $class, $product ) {
    // Get stock status
    switch( $product->get_stock_status() ) {
        case 'pre_order':
            $class = 'pre-order';
            break;
        case 'contact_us':
            $class = 'contact-us';
            break;
    }

    return $class;
}
add_filter( 'woocommerce_get_availability_class', 'filter_woocommerce_get_availability_class', 10, 2 );

在管理产品列表中显示库存状态

在管理产品列表中显示自定义库存状态表,修改如下函数:

// Admin stock html
function filter_woocommerce_admin_stock_html( $stock_html, $product ) {
    // Simple
    if ( $product->is_type( 'simple' ) ) {
        // Get stock status
        $product_stock_status = $product->get_stock_status();
    // Variable
    } elseif ( $product->is_type( 'variable' ) ) {
        foreach( $product->get_visible_children() as $variation_id ) {
            // Get product
            $variation = wc_get_product( $variation_id );

            // Get stock status
            $product_stock_status = $variation->get_stock_status();
        }
    }

    // Stock status
    switch( $product_stock_status ) {
        case 'pre_order':
            $stock_html = '<mark class="pre-order" style="background:transparent none;color:#33ccff;font-weight:700;line-height:1;">' . __( 'Pre order', 'woocommerce' ) . '</mark>';
            break;
        case 'contact_us':
            $stock_html = '<mark class="contact-us" style="background:transparent none;color:#cc33ff;font-weight:700;line-height:1;">' . __( 'Contact us', 'woocommerce' ) . '</mark>';
            break;
    }

    return $stock_html;
}
add_filter( 'woocommerce_admin_stock_html', 'filter_woocommerce_admin_stock_html', 10, 2 );

可选:在 Hooks 中使用自定义库存状态

您可以在以下情况下在 Hooks 中使用自定义库存状态:您可以访问 $product 对象或可以使用全局$product.

注意:

  • 当您无权访问 $product 对象时,请使用全局 $product,例如在 woocommerce_shop_loop_item_title 和 woocommerce_single_product_summary 中hooks.
  • 如果默认传递给回调函数,则访问 $product 对象,如woocommerce_get_price_html 钩子。
最新教程 更多>
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-18
  • 如何在 PHP 中分解具有多个分隔符的字符串?
    如何在 PHP 中分解具有多个分隔符的字符串?
    Php 分解中的多个分隔符在 PHP 中分解具有多个分隔符的字符串可能具有挑战性。为了解决这个问题,可以定义一个自定义函数来执行该任务。一种这样的实现如下所示:private function multiExplode($delimiters,$string) { $ary = explod...
    编程 发布于2024-11-18
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-11-18
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-18
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-18
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-18
  • 您真的可以信任 $_SERVER['REMOTE_ADDR'] 吗?
    您真的可以信任 $_SERVER['REMOTE_ADDR'] 吗?
    $_SERVER['REMOTE_ADDR']的可靠性$_SERVER['REMOTE_ADDR']是Web开发中的一个重要变量,提供发起 HTTP 请求的客户端的 IP 地址。然而,有一个常见的误解,认为该值很容易被欺骗,从而导致对其可信度的担忧。$_SERVER[...
    编程 发布于2024-11-18
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-18
  • 如何使用 PDO 设置连接超时?
    如何使用 PDO 设置连接超时?
    使用 PDO 设置连接超时:综合指南使用 PHP 数据对象 (PDO) 连接到数据库时,如果以下情况,在获取异常时会遇到较长的延迟:服务器不可用可能会令人沮丧。此问题通常在使用 PDO::setAttribute() 方法之前出现。要建立连接超时,可以使用替代方法。通过将选项数组传递给 PDO 构造...
    编程 发布于2024-11-18
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-11-18
  • 如何通过代理服务器发出CURL请求?
    如何通过代理服务器发出CURL请求?
    如何通过代理使用 CURL通过代理服务器使用 CURL 允许您通过中介建立连接来访问受限内容或绕过地理限制。要实现此目的,请按照下列步骤操作:1。定义目标 URL 和代理配置:将您要访问的目标 URL 分配给 $url 变量。在 $proxy 中指定代理服务器和端口多变的。使用格式“IP_ADDRE...
    编程 发布于2024-11-18
  • 为什么 `background-size: cover` 在 Mobile Safari 上失败以及如何修复?
    为什么 `background-size: cover` 在 Mobile Safari 上失败以及如何修复?
    克服背景大小的限制:Mobile Safari 中的覆盖iOS 设备在实现背景图像时面临着独特的挑战,使用background-size: cover覆盖整个元素。尽管是预期的行为,但此属性通常会在这些平台上产生不良结果。为了解决此问题,出现了一种巧妙的解决方法。通过调整背景附件属性以在专门针对 i...
    编程 发布于2024-11-18
  • 如何在 CSS 中模糊背景图像而不影响前景内容?
    如何在 CSS 中模糊背景图像而不影响前景内容?
    用 CSS 模糊背景:避免内容模糊模糊背景可以增强网站美感并将注意力集中在关键内容上。但是,如果模糊无意中影响了内容本身怎么办?在此示例中,尝试模糊背景图像,同时保留 span 元素内前景文本的清晰度。为了实现这一点,可以策略性地使用CSS。关键技术是利用:before伪类来继承背景图像。引入了类为...
    编程 发布于2024-11-18
  • 如何使用共享相同名称的行中的数据更新表中的 NULL 值?
    如何使用共享相同名称的行中的数据更新表中的 NULL 值?
    使用同表同级的数据更新行设想一个具有类似于以下结构的表:ID名称值1测试VALUE12测试2VALUE21测试2NULL4测试NULL1Test3VALUE3您的任务是使用具有相同“NAME”的其他行的数据填充 NULL“VALUE”单元格(即“Test”和“Test2”应该继承其前身的值)。期望的...
    编程 发布于2024-11-18
  • 如何使用危险的SetInnerHTML在React中安全地渲染HTML字符串?
    如何使用危险的SetInnerHTML在React中安全地渲染HTML字符串?
    安全地将 HTML 字符串渲染为 HTML在这种情况下,尝试渲染正常的 HTML 内容字符串时会出现问题,但它而是显示为字符串而不被解释为 HTML。当angerlySetInnerHTML 中使用的属性是对象而不是字符串时,通常会遇到这种情况。要解决此问题,请确保 this.props.match...
    编程 发布于2024-11-18

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3