为 Woocommerce 产品中的库存通知添加额外的 CSS 类

Cra*_*ray 1 php wordpress product stock woocommerce

我需要为 WooCommerce 产品页面上的库存通知提供额外的课程。目前,有两个不同的类in-stockout-of-stock。但 WooCommerce 还有第三种选择。如果库存商品很少,则类别也为in-stock。如果有类似的东西就好了few-in-stock

stock.php我检查了生成输出的模板文件。只有一行代码:

<p class="stock <?php echo esc_attr( $class ); ?>"><?php echo wp_kses_post( $availability ); ?></p>
Run Code Online (Sandbox Code Playgroud)

并且$class只有上面的两个选项。有什么函数可以用来添加第三个类吗?

目前我计算产品的库存是这样的:

$stock_count = $product->get_stock_quantity();
Run Code Online (Sandbox Code Playgroud)

并像这样添加我的新课程:

<p class="stock <?php echo esc_attr( $class ); ?> <?php if ( $stock_count <= '2' ) : ?>few-in-stock<?php endif; ?>"><?php echo wp_kses_post( $availability ); ?></p>
Run Code Online (Sandbox Code Playgroud)

但也许有更好的方法来做到这一点?!

Loi*_*tec 5

这是挂钩在过滤器钩子中的函数woocommerce_get_stock_html,它允许您为低库存添加额外的库存通知(使用自定义 CSS):

add_filter( 'woocommerce_get_stock_html', 'filter_get_stock_html', 10, 2 );
function filter_get_stock_html( $html, $product ) {
    // Low stock quantity amount
    $low_stock_qty = 3;

    $availability = $product->get_availability();

    if ( ! empty( $availability['availability'] ) ) {
        $class = esc_attr( $availability['class'] );
        $avail_text = wp_kses_post( $availability['availability'] );
        $stock_qty = $product->get_stock_quantity();

        if( $stock_qty <= $low_stock_qty ){
            $class .= ' few-in-stock';
            $avail_text = __('Few in stock', 'woocommerce');
        }
        ob_start();

        // Make your changes below
        ?>
        <p class="stock <?php echo $class; ?>"><?php echo $avail_text; ?></p>
        <?php

        $html = ob_get_clean();
    }
    return $html;
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。

可选择从常规产品库存设置中获取低库存量

如果您在Settings>>中设置了“低库存阈值” ,您可以获取它并替换手动输入的值,替换以下行:ProductInventory

// Low stock quantity amount
 $low_stock_qty = 3;
Run Code Online (Sandbox Code Playgroud)

这样:

// Low stock quantity amount
 $low_stock_qty = get_option('woocommerce_notify_low_stock_amount');
Run Code Online (Sandbox Code Playgroud)

(感谢@Demian)

在此输入图像描述