WooCommerce 中未显示产品变体库存数量
Product variation stock quantity not showing in WooCommerce
在 woocommerce 中,我更改了 "In Stock" 文本以针对不同的库存编号显示不同的文本。因此,对于 3 以上的库存编号,它表示:“ 5 in
库存”(用 css 显示为绿色),对于 3 号或以下的库存编号,它显示 "only 2 left"(用 css 显示为红色)。就像亚马逊所做的那样。
如您在此处看到的,这非常适用于简单的产品:https://edelmix.de/superdry-urban-blau-limette-quarzuhr-syg164un/
但在可变产品上,我的代码没有预期的结果。这当然是为了显示与上述相同的文本以及适当的变体库存数量。
我得到的是一个包含所有版本总数的文本。我在后端为所有变体打开了产品级别的管理产品数量,并且在变体上有不同的库存数量。
到目前为止,可变产品的结果可以在这里看到:
https://stage.edelmix.de/buddha-to-buddha-blue-lace-agate-ring-603ba/
显示的数量是 5(在您 select 下拉列表中的变化之后)。这是所有变体的总数量。不同尺寸的戒指有 1/3/1 的存货数量(正如您从我的测试中看到的,与价格旁边的存货变量相呼应),这就是我希望在每个变体 [=37] 时显示的内容=]ed(与简单产品一样使用自定义文本)。
我目前的代码是:
add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2);
function custom_get_availability( $availability, $_product ) {
global $woocommerce, $product;
if ($_product->is_type( 'variable' )) {
$available_variations = $product->get_available_variations();
foreach ($available_variations as $variation)
{
$variation_id = $variation['variation_id'];
$variation_obj = new WC_Product_Variation($variation_id);
$stock = $variation_obj->get_stock_quantity();
echo $stock; // <-- for testing purpose to see if I do get the individual variation-quantities = works!!
}
} else {
$stock = $product->get_stock_quantity();
}
// change text "In Stock' to 'Auf Lager' when quantity more than 3
if ($_product->is_in_stock() && $stock > 3 ) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce');
// change text to n Left, where n is the quantity
if ($_product->is_in_stock() && ($stock <= 3 )) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr( $availability['class'] ) . '">' . __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>';
// change text "Out of Stock' to 'SOLD OUT'
if (!$_product->is_in_stock()) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce');
// change text "In Stock' to 'Special Order' for products with unmanaged stock
if ( !$_product->managing_stock() && $_product->is_in_stock() ) $availability['availability'] = __('Auf Lager', 'woocommerce');
return $availability;
}
为什么这不起作用?
我在过去的几个小时里尝试了所有方法,但不知道为什么它不能正常工作。
非常感谢任何帮助。
它没有用,因为你白白制造了并发症。在挂钩函数中, $product
参数是当前选择的产品变体(在可变产品中),因此您不需要任何 foreach 循环来从变量中获取变体产品。
所以你的代码现在会更紧凑。试试这个:
add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2);
function custom_get_availability( $availability, $_product ) {
$stock = $_product->get_stock_quantity();
// change text "In Stock' to 'Auf Lager' when quantity more than 3
if ( $_product->is_in_stock() && $stock > 3 ) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce');
// change text to n Left, where n is the quantity
if ( $_product->is_in_stock() && $stock <= 3 ) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr( $availability['class'] ) . '">' . __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>';
// change text "Out of Stock' to 'SOLD OUT'
if (! $_product->is_in_stock() ) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce');
// change text "In Stock' to 'Special Order' for products with unmanaged stock
if ( ! $_product->managing_stock() && $_product->is_in_stock() ) $availability['availability'] = __('Auf Lager', 'woocommerce');
return $availability;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已测试并正常工作
在 woocommerce 中,我更改了 "In Stock" 文本以针对不同的库存编号显示不同的文本。因此,对于 3 以上的库存编号,它表示:“ 5 in 库存”(用 css 显示为绿色),对于 3 号或以下的库存编号,它显示 "only 2 left"(用 css 显示为红色)。就像亚马逊所做的那样。
如您在此处看到的,这非常适用于简单的产品:https://edelmix.de/superdry-urban-blau-limette-quarzuhr-syg164un/
但在可变产品上,我的代码没有预期的结果。这当然是为了显示与上述相同的文本以及适当的变体库存数量。
我得到的是一个包含所有版本总数的文本。我在后端为所有变体打开了产品级别的管理产品数量,并且在变体上有不同的库存数量。
到目前为止,可变产品的结果可以在这里看到: https://stage.edelmix.de/buddha-to-buddha-blue-lace-agate-ring-603ba/
显示的数量是 5(在您 select 下拉列表中的变化之后)。这是所有变体的总数量。不同尺寸的戒指有 1/3/1 的存货数量(正如您从我的测试中看到的,与价格旁边的存货变量相呼应),这就是我希望在每个变体 [=37] 时显示的内容=]ed(与简单产品一样使用自定义文本)。
我目前的代码是:
add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2);
function custom_get_availability( $availability, $_product ) {
global $woocommerce, $product;
if ($_product->is_type( 'variable' )) {
$available_variations = $product->get_available_variations();
foreach ($available_variations as $variation)
{
$variation_id = $variation['variation_id'];
$variation_obj = new WC_Product_Variation($variation_id);
$stock = $variation_obj->get_stock_quantity();
echo $stock; // <-- for testing purpose to see if I do get the individual variation-quantities = works!!
}
} else {
$stock = $product->get_stock_quantity();
}
// change text "In Stock' to 'Auf Lager' when quantity more than 3
if ($_product->is_in_stock() && $stock > 3 ) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce');
// change text to n Left, where n is the quantity
if ($_product->is_in_stock() && ($stock <= 3 )) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr( $availability['class'] ) . '">' . __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>';
// change text "Out of Stock' to 'SOLD OUT'
if (!$_product->is_in_stock()) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce');
// change text "In Stock' to 'Special Order' for products with unmanaged stock
if ( !$_product->managing_stock() && $_product->is_in_stock() ) $availability['availability'] = __('Auf Lager', 'woocommerce');
return $availability;
}
为什么这不起作用?
我在过去的几个小时里尝试了所有方法,但不知道为什么它不能正常工作。
非常感谢任何帮助。
它没有用,因为你白白制造了并发症。在挂钩函数中, $product
参数是当前选择的产品变体(在可变产品中),因此您不需要任何 foreach 循环来从变量中获取变体产品。
所以你的代码现在会更紧凑。试试这个:
add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2);
function custom_get_availability( $availability, $_product ) {
$stock = $_product->get_stock_quantity();
// change text "In Stock' to 'Auf Lager' when quantity more than 3
if ( $_product->is_in_stock() && $stock > 3 ) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce');
// change text to n Left, where n is the quantity
if ( $_product->is_in_stock() && $stock <= 3 ) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr( $availability['class'] ) . '">' . __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>';
// change text "Out of Stock' to 'SOLD OUT'
if (! $_product->is_in_stock() ) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce');
// change text "In Stock' to 'Special Order' for products with unmanaged stock
if ( ! $_product->managing_stock() && $_product->is_in_stock() ) $availability['availability'] = __('Auf Lager', 'woocommerce');
return $availability;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已测试并正常工作