• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Выбор количества товара в общем каталоге

Grigoriy

Новичок
Добрый день! Я новичок, есть много вопросов. Потихоньку читаю форум и смотрю тематические видео. Есть магазин dudino.ru. Хочу реализовать возможность добавлять определённое количество товара в корзину без необходимости переходит на страницу самого товара. Во вложении виден один из способов решения. Ещё видел магазин, где под товаром было поле с + и - и покупатель подбирал нужное себе количество. Ссылку, правда, потерял. Как можно реализовать такой функционал?
 

Вложения

  • Снимок экрана 2016-09-13 в 15.44.37.png
    Снимок экрана 2016-09-13 в 15.44.37.png
    99.6 KB · Просмотры: 103

rikitiki

Специалист
Местный
Для вариативного товара сделать просто, так как существует соответствующий плагин. Для простого товара сложней, виду того что плагина нет и придётся основательно корректировать файлы woocоmmerce. В двух словах не объяснишь.
Нечто подобное делал на двух своих сайтах:
http://innka.info/product-category/uxod-za-kozhej/sredstva-timewise/
http://xarod.tk/shop/
 

Grigoriy

Новичок
Для вариативного товара сделать просто, так как существует соответствующий плагин. Для простого товара сложней, виду того что плагина нет и придётся основательно корректировать файлы woocоmmerce. В двух словах не объяснишь.
Нечто подобное делал на двух своих сайтах:
http://innka.info/product-category/uxod-za-kozhej/sredstva-timewise/
http://xarod.tk/shop/
Да, реализация хорошая. Но мне надо, чтобы это окошко с 1 и стрелками отображалось под каждым товаром постоянно. Без необходимости курсор на него наводить.
Есть много не вариативных товаров, так что нужно комплексное решение.

P.S. Вы сам делали? Очень трудоёмко?
 

searchingman

Гуру
Местный
Для простых товаров с поддержкой AJAX работает следующий код (вставьте в functions.php).
PHP:
// выбор количества при добавлении простых товаров в корзину с поддержкой AJAX на страницах категорий товаров
add_action('woocommerce_before_shop_loop', 'custom_woo_before_shop_link');
function custom_woo_before_shop_link() {
    add_filter('woocommerce_loop_add_to_cart_link', 'custom_woo_loop_add_to_cart_link', 10, 2);
    add_action('woocommerce_after_shop_loop', 'custom_woo_after_shop_loop');
}
// customise Add to Cart link/button for product loop
function custom_woo_loop_add_to_cart_link($button, $product) {
    // not for variable, grouped or external products
    if (!in_array($product->product_type, array('variable', 'grouped', 'external'))) {
        // only if can be purchased
        if ($product->is_purchasable()) {
            // show qty +/- with button
            ob_start();
            woocommerce_simple_add_to_cart();
            $button = ob_get_clean();
            // modify button so that AJAX add-to-cart script finds it
            $replacement = sprintf('data-product_id="%d" data-quantity="1" $1 ajax_add_to_cart add_to_cart_button product_type_simple ', $product->id);
            $button = preg_replace('/(class="single_add_to_cart_button)/', $replacement, $button);
        }
    }
    return $button;
}
// add the required JavaScript
function custom_woo_after_shop_loop() {
    ?>

    <script>
    jQuery(function($) {
    <?php /* when product quantity changes, update quantity attribute on add-to-cart button */ ?>
    $("form.cart").on("change", "input.qty", function() {
        $(this.form).find("button[data-quantity]").data("quantity", this.value);
    });
    <?php /* remove old "view cart" text, only need latest one thanks! */ ?>
    $(document.body).on("adding_to_cart", function() {
        $("a.added_to_cart").remove();
    });
    });
    </script>

    <?php
}
Результат на примере темы Storefront. (см. скриншот)
 

tuxfighter

Гуру
Местный
Для простых товаров с поддержкой AJAX работает следующий код (вставьте в functions.php).

Результат на примере темы Storefront. (см. скриншот)

Тема Vantage аякс работает, но все плохо:
vantage.jpg

изменил кол-во только у одного товара

прийдеться вернутся к старому варианту
 

searchingman

Гуру
Местный
Тема Vantage аякс работает, но все плохо:
Посмотреть вложение 2461

изменил кол-во только у одного товара

прийдеться вернутся к старому варианту
Представленный выше код используется только для простых товаров. Вариативные товары он не затрагивает.
У Вас, вероятно, используется какой-то код (плагин) для вариативных товаров с которым, возможно, происходит конфликт.
Вот так выглядит используемый код на теме Vantage (см. скриншот).
 

Grigoriy

Новичок
Для простых товаров с поддержкой AJAX работает следующий код (вставьте в functions.php).
Спасибо тебе, мил человек, огромное! Работает!
А как можно вывести выпадающий список с вариантами товара на основную страницу? Как на скриншоте у пользователя tuxfighter
 

Ahazhgir

Новичок
Для простых товаров с поддержкой AJAX работает следующий код (вставьте в functions.php).
PHP:
// выбор количества при добавлении простых товаров в корзину с поддержкой AJAX на страницах категорий товаров
add_action('woocommerce_before_shop_loop', 'custom_woo_before_shop_link');
function custom_woo_before_shop_link() {
    add_filter('woocommerce_loop_add_to_cart_link', 'custom_woo_loop_add_to_cart_link', 10, 2);
    add_action('woocommerce_after_shop_loop', 'custom_woo_after_shop_loop');
}
// customise Add to Cart link/button for product loop
function custom_woo_loop_add_to_cart_link($button, $product) {
    // not for variable, grouped or external products
    if (!in_array($product->product_type, array('variable', 'grouped', 'external'))) {
        // only if can be purchased
        if ($product->is_purchasable()) {
            // show qty +/- with button
            ob_start();
            woocommerce_simple_add_to_cart();
            $button = ob_get_clean();
            // modify button so that AJAX add-to-cart script finds it
            $replacement = sprintf('data-product_id="%d" data-quantity="1" $1 ajax_add_to_cart add_to_cart_button product_type_simple ', $product->id);
            $button = preg_replace('/(class="single_add_to_cart_button)/', $replacement, $button);
        }
    }
    return $button;
}
// add the required JavaScript
function custom_woo_after_shop_loop() {
    ?>

    <script>
    jQuery(function($) {
    <?php /* when product quantity changes, update quantity attribute on add-to-cart button */ ?>
    $("form.cart").on("change", "input.qty", function() {
        $(this.form).find("button[data-quantity]").data("quantity", this.value);
    });
    <?php /* remove old "view cart" text, only need latest one thanks! */ ?>
    $(document.body).on("adding_to_cart", function() {
        $("a.added_to_cart").remove();
    });
    });
    </script>

    <?php
}
Результат на примере темы Storefront. (см. скриншот)

Доброго времени суток.
Вы знаете как добавить подобную функцию не только на страницах категорий, но и для товаров выводимых шорткодом?
 

Moonlight31

Опытный
Доброго времени суток.
Вы знаете как добавить подобную функцию не только на страницах категорий, но и для товаров выводимых шорткодом?
Код:
function custom_quantity_field_archive() {
    $product = wc_get_product( get_the_ID() );
    if ( ! $product->is_sold_individually() && 'variable' != $product->product_type && $product->is_purchasable() && $product->is_in_stock() ) {
        woocommerce_quantity_input( array( 'min_value' => 1, 'max_value' => $product->backorders_allowed() ? '' : $product->get_stock_quantity() ) );
    }
}
add_action( 'woocommerce_after_shop_loop_item', 'custom_quantity_field_archive', 9 );


function custom_add_to_cart_quantity_handler() {
    wc_enqueue_js( '

        jQuery( ".product-type-simple" ).on( "click", ".quantity input", function() {
            return false;
        });

        jQuery( ".product-type-simple" ).on( "change input", ".quantity .qty", function() {
            var add_to_cart_button = jQuery( this ).parents( ".product" ).find( ".add_to_cart_button" );
            // For AJAX add-to-cart actions
            add_to_cart_button.data( "quantity", jQuery( this ).val() );
            // For non-AJAX add-to-cart actions
            add_to_cart_button.attr( "href", "?add-to-cart=" + add_to_cart_button.attr( "data-product_id" ) + "&quantity=" + jQuery( this ).val() );
        });

    ' );
}
add_action( 'init', 'custom_add_to_cart_quantity_handler' );
Добавил при помощи этого кода, кнопки появились и в общем архиве и для добавленных через шорткоды
 

onezze

Новичок
Доброго дня, а есть ли решение для вариативных товаров?
 

sock2008

Новичок
Использовал предложенный выше код.

Почему при количестве товара, равному 1 в моей теме OceanWP пропадают кнопки с + и - на всех товарах на странице.

Если на странице нет товара с количеством 1 , то все нормально:
 
Сверху Снизу