Метод get_stock_quantity () продукта WooCommerce возвращает значение null - PullRequest
2 голосов
/ 05 августа 2020

У меня проблема, когда я пытаюсь получить доступное количество продукта в моем представлении.

Это мой код:

function wcs_custom_get_availability( $availability, $_product ) {
    global $product;

    // Change In Stock Text
    if ( $_product->is_in_stock() ) {
        $availability['availability'] = __( 'Plenty available in our store!', 'woocommerce');
    }
         
    // Change in Stock Text to only 1 or 2 left
    if ( $_product->is_in_stock() && $product->get_stock_quantity() <= 2 ) {
        $availability['availability'] = sprintf( __('Only %s left in store!', 'woocommerce'), $product->get_stock_quantity() );
    }
         
    // Change Out of Stock Text
    if ( ! $_product->is_in_stock() ) {
        $availability['availability'] = __('Sorry, All sold out!', 'woocommerce');
    }
         
    return $availability;
}

Результат выполнения выглядит следующим образом : Осталось только в магазине!

У меня есть доступ к переменной продукта, но результат нулевой, но я хотел бы получить количество.

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Используя с ним WC_Product метод get_manage_stock(), вы сможете избежать этой проблемы. Я также немного упростил ваш код:

 add_filter( 'woocommerce_get_availability', 'filter_wc_get_availability', 10, 2);
function filter_wc_get_availability( $availability, $product ) {
    // In Stock
    if ( $product->is_in_stock() ) {
        $stock_quantity = $product->get_stock_quantity();

        // Change Text for low stock (1 or 2 left)
        if ( $product->get_manage_stock() && $stock_quantity == ( 1 || 2 ) ) {
            $availability['availability'] = sprintf( __('Only %s left in store!', 'woocommerce'), $stock_quantity );
        } 
        // Change in Stock Text (when more than 2)
        else {
            $availability['availability'] = __( 'Plenty available in our store!', 'woocommerce');
        }
    }
    // Change Out of Stock Text
    else {
        $availability['availability'] = __('Sorry, All sold out!', 'woocommerce');
    }
         
    return $availability;
}

Это должно решить эту проблему.

Не используйте global $product; как для переменных товаров он будет принимать переменный объект продукта вместо вариаций этого переменного продукта. Объект WC_Product уже включен в функцию в качестве аргумента. Запас уменьшается для вариантов продуктов, а не для продуктов родительской переменной.

0 голосов
/ 05 августа 2020

Исправление:

Заменить $product->get_stock_quantity() на $_product->get_stock_quantity().

function wcs_custom_get_availability( $availability, $_product ) {
    global $product;
    // Change In Stock Text
    if ( $_product->is_in_stock() ) {
        $availability['availability'] = __( 'Plenty available in our store!', 'woocommerce');
    }
         
    // Change in Stock Text to only 1 or 2 left
    if ( $_product->is_in_stock() && $_product->get_stock_quantity() <= 2 ) {
        $availability['availability'] = sprintf( __('Only %s left in store!', 'woocommerce'), $_product->get_stock_quantity() );
    }
         
    // Change Out of Stock Text
    if ( ! $_product->is_in_stock() ) {
        $availability['availability'] = __('Sorry, All sold out!', 'woocommerce');
    }
         
    return $availability;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...