в woocommerce я изменил текст «В наличии», чтобы отображать другой текст для разных номеров запасов. Таким образом, для номеров акций больше 3 он говорит: «5 в наличии» (окрашен в зеленый цвет с помощью CSS), а для номеров акций 3 или ниже он говорит «осталось только 2» (окрашен в красный цвет с помощью CSS). Так же, как это делает Amazon.
Это прекрасно работает с простыми продуктами, как вы можете видеть здесь: 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;
}
Почему это не работает?
Я все перепробовал за последние часы и не знаю, почему это не работает как надо.
Любая помощь горячо приветствуется.