Проверка наличия товара на складе в Woocommerce 3

У меня есть следующий код, который добавляет простое уведомление о наличии на складе и доставке в продукт на странице магазина / архива, но в случае, когда количество продукта на складе равно 0 (отсутствует на складе), уведомление не отображается.

add_action( 'woocommerce_after_shop_loop_item','show_stock_shop', 90 );

function show_stock_shop() {
    global $product;

    $regular = $product->regular_price;
    $sale = $product->sale_price;
//  $stock = the_field('stock-available');

    if ( $product->stock ) { // if manage stock is enabled 
        if ( $product->get_stock_quantity() > 0 && $regular >= 500 || $sale >= 500  ) { // in stock, free shipping
            echo '<div class="remaining text-center pt-2 pb-2">Skladom. <span class="doprava-zadarmo">Doprava zadarmo</span></div>';
        } elseif ( $product->get_stock_quantity() == 0 && $regular >= 500 || $sale >= 500 ) { // out of stock, free shipping
            echo '<div class="remaining text-center pt-2 pb-2"><s>(nie je skladom)</s>. <span class="doprava-zadarmo">Doprava zadarmo</span></div>';
        } elseif ( $product->get_stock_quantity() > 0 && $regular < 500 || $sale < 500 ) { // in stock, not free shipping
            echo '<div class="remaining text-center pt-2 pb-2">Skladom. <span class="doprava-zadarmo">Doprava zadarmo od 500 eur</span></div>';
        } elseif ( $product->get_stock_quantity() == 0 && $regular < 500 || $sale < 500 ) { // out of stock, not free shipping
            echo '<div class="remaining text-center pt-2 pb-2"><s>(nie je skladom)</s>. <span class="doprava-zadarmo">Doprava zadarmo od 500 eur</span></div>';
        } else {
            echo '<div class="remaining text-center pt-2 pb-2">Do ' . /*$stock .*/ ' dní</div>'; 
        }
    }
}

введите здесь описание изображения


person Juraj    schedule 09.03.2019    source источник
comment
Какое у вас индивидуальное уведомление? Уведомление в другом?   -  person Mr. Jo    schedule 09.03.2019
comment
Я добавил изображение. Как видите, он ничего не выводит, иначе не работает ...   -  person Juraj    schedule 09.03.2019
comment
А какое уведомление вы имеете в виду? В вашем коде около 5 уведомлений.   -  person Mr. Jo    schedule 09.03.2019
comment
Уведомления об отсутствии на складе были неправильными, теперь все в порядке. Спасибо   -  person Juraj    schedule 09.03.2019


Ответы (1)


Ваш код устарел. Начиная с Woocommerce 3, к свойствам продукта нельзя получить прямой доступ, и вам следует использовать available WC_Product методы, например is_in_stock() условный метод на < strong> проверьте наличие товара на складе.

Попробуйте следующую упрощенную версию кода:

add_action( 'woocommerce_after_shop_loop_item', 'display_loop_item_stock_notice', 90 );
function display_loop_item_stock_notice() {
    global $product;

    // For active product price: Free shipping || NO Free shipping
    $text = $product->get_price() >= 500 ? __("Doprava zadarmo") : __("Doprava zadarmo od 500 eur");

    // In stock
    if ( $product->is_in_stock() ) { 
        $text = __("Skladom.") . ' <span class="doprava-zadarmo">' . $text . '</span>';
    } 
    // Out of stock
    else {
        $text = '<s>(' . __("nie je skladom") . ')</s> <span class="doprava-zadarmo">' . $text . '</span>';
    }
    echo '<div class="remaining text-center pt-2 pb-2">' . $text . '</div>';
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

person LoicTheAztec    schedule 09.03.2019