• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

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

Image CMS

Grigoriy

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

Вложения

rikitiki

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

Grigoriy

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

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

searchingman

Гуру
Местный
#4
Для простых товаров с поддержкой 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

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

Результат на примере темы Storefront. (см. скриншот)
Тема Vantage аякс работает, но все плохо:
vantage.jpg

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

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

searchingman

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

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

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

Grigoriy

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

Ahazhgir

Новичок
#10
Для простых товаров с поддержкой 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. (см. скриншот)
Доброго времени суток.
Вы знаете как добавить подобную функцию не только на страницах категорий, но и для товаров выводимых шорткодом?