在 Woocommerce 产品中为库存通知添加额外的 CSS class
Add an extra CSS class for stock notice in Woocommerce products
我需要一个额外的 class 用于 WooCommerce 产品页面上的库存通知。
目前,有两个不同的 classes in-stock
和 out-of-stock
。
但是 WooCommerce 中还有第三种选择。如果只有几件库存商品,class 也将是 in-stock
。如果有 few-in-stock
.
这样的东西就好了
我检查了生成输出的模板文件 stock.php
。只有一行代码:
<p class="stock <?php echo esc_attr( $class ); ?>"><?php echo wp_kses_post( $availability ); ?></p>
而$class
只有上面的两个选项。有什么函数可以用来添加第三个 class?
目前我是这样统计产品库存的:
$stock_count = $product->get_stock_quantity();
然后像这样添加我的新 class:
<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>
但也许有更好的方法来做到这一点?!
这是 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;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。 已测试并有效。
Get optionally the low stock amount from general product inventory settings
If you have set "low stock threshold" in Settings
> Product
> Inventory
, you can get it and replace the manual inputed value, replacing the following line:
// Low stock quantity amount
$low_stock_qty = 3;
By this:
// Low stock quantity amount
$low_stock_qty = get_option('woocommerce_notify_low_stock_amount');
(Thanks to @Demian)
@LoicTheAztec 的回答是一个好的开始。但是,缺少的关键点是您想从后端反映 "Low stock threshold" 。
在他的回答中你必须手动填写低库存数量是多少if( $stock_qty <= 10 ){
。但是,woocommerce 后端设置 > 产品 > 库存确实记录了数量。因此,您最好在这一行中填写:
if( $stock_qty <= get_option( 'woocommerce_notify_low_stock_amount' ) ){
这样,如果您想更改数量,就不必深入研究函数文件。
所以完整的代码是:
add_filter( 'woocommerce_get_stock_html', 'filter_get_stock_html', 10, 2 );
function filter_get_stock_html( $html, $product ) {
$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 <= get_option( 'woocommerce_notify_low_stock_amount' ) ){ // reflects backend for Low stock threshold
$class .= ' low-in-stock';
$avail_text = __('Low in stock', 'woocommerce');
}
ob_start();
// HTML reflection:
?><p class="stock <?php echo $class; ?>"><?php echo $avail_text; ?></p><?php
$html = ob_get_clean();
}
return $html;
}
Extra:如果你不希望上面的low-in-stock
class涉及到负库存数量(即-10),改变上面代码片段
的下一行
if( $stock_qty <= get_option( 'woocommerce_notify_low_stock_amount' ) ){
有了这个:
if( $stock_qty >= 0 && $stock_qty <= get_option( 'woocommerce_notify_low_stock_amount' ) ){
它将 low-in-stock
class 设置在 0 和您在后端 woocommerce 设置中设置的数量之间。
我需要一个额外的 class 用于 WooCommerce 产品页面上的库存通知。
目前,有两个不同的 classes in-stock
和 out-of-stock
。
但是 WooCommerce 中还有第三种选择。如果只有几件库存商品,class 也将是 in-stock
。如果有 few-in-stock
.
我检查了生成输出的模板文件 stock.php
。只有一行代码:
<p class="stock <?php echo esc_attr( $class ); ?>"><?php echo wp_kses_post( $availability ); ?></p>
而$class
只有上面的两个选项。有什么函数可以用来添加第三个 class?
目前我是这样统计产品库存的:
$stock_count = $product->get_stock_quantity();
然后像这样添加我的新 class:
<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>
但也许有更好的方法来做到这一点?!
这是 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;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。 已测试并有效。
Get optionally the low stock amount from general product inventory settings
If you have set "low stock threshold" in
Settings
>Product
>Inventory
, you can get it and replace the manual inputed value, replacing the following line:// Low stock quantity amount $low_stock_qty = 3;
By this:
// Low stock quantity amount $low_stock_qty = get_option('woocommerce_notify_low_stock_amount');
(Thanks to @Demian)
@LoicTheAztec 的回答是一个好的开始。但是,缺少的关键点是您想从后端反映 "Low stock threshold" 。
在他的回答中你必须手动填写低库存数量是多少if( $stock_qty <= 10 ){
。但是,woocommerce 后端设置 > 产品 > 库存确实记录了数量。因此,您最好在这一行中填写:
if( $stock_qty <= get_option( 'woocommerce_notify_low_stock_amount' ) ){
这样,如果您想更改数量,就不必深入研究函数文件。
所以完整的代码是:
add_filter( 'woocommerce_get_stock_html', 'filter_get_stock_html', 10, 2 );
function filter_get_stock_html( $html, $product ) {
$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 <= get_option( 'woocommerce_notify_low_stock_amount' ) ){ // reflects backend for Low stock threshold
$class .= ' low-in-stock';
$avail_text = __('Low in stock', 'woocommerce');
}
ob_start();
// HTML reflection:
?><p class="stock <?php echo $class; ?>"><?php echo $avail_text; ?></p><?php
$html = ob_get_clean();
}
return $html;
}
Extra:如果你不希望上面的low-in-stock
class涉及到负库存数量(即-10),改变上面代码片段
if( $stock_qty <= get_option( 'woocommerce_notify_low_stock_amount' ) ){
有了这个:
if( $stock_qty >= 0 && $stock_qty <= get_option( 'woocommerce_notify_low_stock_amount' ) ){
它将 low-in-stock
class 设置在 0 和您在后端 woocommerce 设置中设置的数量之间。