Woocommerce - Отображение количества товара для вариаций

26 июн. 2018 г., 13:56:47
Просмотры: 18.4K
Голосов: 0

Я искал в Google и пробовал различные фрагменты кода, чтобы отобразить количество товара для вариаций на странице продукта.

Например, когда я выбираю размер XXL для футболки, должно отображаться "xx в наличии".

Я не смог найти рабочее решение или достаточно понятное объяснение, чтобы его реализовать.

Я пробовал: https://stackoverflow.com/questions/30514596/how-get-variations-stock-quantity-woocommerce и многое другое.

Вот мой текущий код для кнопки "Добавить в корзину":

<?php
/**
 * Кнопка добавления в корзину для одной вариации
 *
 * @see https://docs.woocommerce.com/document/template-structure/
 * @package WooCommerce/Templates
 * @version 3.4.0
 */

defined( 'ABSPATH' ) || exit;

global $product;
?>
<div class="woocommerce-variation-add-to-cart variations_button">
    <?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>

    <?php
    do_action( 'woocommerce_before_add_to_cart_quantity' );

    woocommerce_quantity_input( array(
        'min_value'   => apply_filters( 'woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ),
        'max_value'   => apply_filters( 'woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ),
        'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( wp_unslash( $_POST['quantity'] ) ) : $product->get_min_purchase_quantity(), // WPCS: CSRF ok, input var ok.
    ) );

    do_action( 'woocommerce_after_add_to_cart_quantity' );
    ?>

    <button type="submit" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>

    <?php do_action( 'woocommerce_after_add_to_cart_button' ); ?>

    <input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" />
    <input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" />
    <input type="hidden" name="variation_id" class="variation_id" value="0" />
</div>

Я пробовал следующий код, но он выводит только одну вариацию XXXL и показывает неправильное количество товара.

<?php
        $product_variations = $product->get_available_variations();

        foreach ($product_variations as $variation)  {
            $var_data = $variation['attributes'];
            $var_data['in_stock'] = $variation['is_in_stock'];
        }

        // Выводим все атрибуты с информацией о наличии
        echo '<pre>';
        print_r($var_data);
        echo '</pre>';
    ?>

Надеюсь, вы сможете направить меня в правильное русло!

С уважением, Робберт

0
Все ответы на вопрос 1
5

Отображение количества товара на складе для каждой вариации продукта является стандартным поведением WooCommerce. Для лучших результатов при разработке собственной темы используйте стандартную HTML-структуру storefront/woocommerce и JS-файлы, а затем стилизуйте их с помощью CSS.

Чтобы проверить, правильно ли отображается количество товара на складе для каждой вариации, я установил чистый WordPress 4.9.6 и WooCommerce 3.4.3 и следовал инструкциям на странице Вариативный товар, чтобы добавить его.

Не забудьте установить количество товара на складе для каждой вариации и добавить цену к каждой вариации, чтобы товар был в наличии.

Если вам нужно получить количество товара на складе для каждой вариации по какой-либо другой причине, вы можете использовать этот код:

/**
 * Получить количество товара на складе для всех вариаций
 * 
 * @param int $product_id ID продукта, который имеет вариации
 */
function wpse_306996_get_variations_stock_quantity( $product_id ) {

    $product    = wc_get_product( $product_id );
    $variations = $product->get_available_variations();

    $variations_stock = array();

    foreach ( $variations as $variation ) {

        $variation_o = new WC_Product_Variation( $variation['variation_id'] );
        $variations_stock[] = $variation_o->get_stock_quantity();
    }

    return $variations_stock;
}

/**
 * ИСПОЛЬЗОВАНИЕ
 */
$variations_stock = wpse_306996_get_variations_stock_quantity( $product_id );
4 июл. 2018 г. 16:02:37
Комментарии

WP 4.6 или 4.9.6? ;)

User User
6 июл. 2018 г. 15:50:55

Полагаю, этот код нужно поместить в functions.php? Или как мне его реализовать? Я, кстати, не создаю пользовательскую тему. Я пытаюсь добавить это на существующий сайт/тему. С наилучшими пожеланиями!

Granny Granny
9 июл. 2018 г. 14:31:56

Вероятно, вам следует разместить этот код там, где вы хотите отображать количество вариантов на складе.

kierzniak kierzniak
9 июл. 2018 г. 18:58:08

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

Granny Granny
11 июл. 2018 г. 09:49:20

Я обновил свой ответ, чтобы он не работал через действия. Вы можете поместить функцию wpse_306996_get_variations_stock_quantity в файл functions.php и перенести раздел использования в ваш шаблон. Не забудьте указать $product_id продукта, который имеет вариации.

kierzniak kierzniak
11 июл. 2018 г. 10:46:59