这可以与简单的产品完美配合,如您所见:https://edelmix.de/superdry-urban-blau-limette-quarzuhr-syg164un/
但是对于可变产品,我的代码没有所需的结果。这当然是显示与上述相同的文本以及变化的适当库存量。
我得到的是一份包含所有变体总数的文字。我开启了后端产品级别的产品数量管理所有变化,并在变化中有不同的库存数量。
现在可以看到变量产品的结果: https://stage.edelmix.de/buddha-to-buddha-blue-lace-agate-ring-603ba/
显示的数量为5(从下拉列表中选择变体后)。这是所有变体的总数量。不同的戒指尺寸的库存数量为1/3/1(从我的测试中可以看出,它与价格旁边的股票变量相呼应),这就是我希望在选择每个变量时显示的内容(带有自定义文本与简单产品一样。)
到目前为止我的代码是:
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;
}
为什么这不起作用?
我在最后几个小时内尝试了所有内容,但不知道为什么这不起作用。
非常感谢任何帮助。
答案 0 :(得分:1)
它没有用,因为你没有做任何并发症。在钩子函数中, $product
参数是当前选定的产品变体(在变量产品中),因此您不需要任何foreach循环来获取变量产品的变体。< / p>
所以你的代码现在会变得更加紧凑。试试这个:
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文件中,或者放在任何插件文件中。
经过测试和工作