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

Поле выбора количества товара в каталоге и в категориях

father

Новичок
Здравствуйте!
Подскажите, есть ли работающий снипет, добавляющий поле "+1-" в карточку товара в основном каталоге магазина и в категориях? И при этом корректно работающий с Ajax.

Спасибо!
 

father

Новичок
Естественно, перед тем, как публиковать новую тему провел в поиске на этом форуме пару вечеров, но рабочего на 100% снипета я не нашел, поэтому и спрашиваю, чтобы далее не тратить время впустую.
А вам, tuxfighter, спасибо за содержательный ответ и потраченное время.

Вот решение, которое работает с Ajax и добавляет поле "-1+" не только в корень каталога магазина, но и в категории - http://mssite.ru/dobavlyaem-tovar-bez-perezagruzki-stranicy-woo/
 
  • Like
Реакции: D&B

rikitiki

Специалист
Местный
Вот решение, которое работает с Ajax и добавляет поле "-1+" не только в корень каталога магазина, но и в категории
Это старое решение. Не знаю как сейчас обстоят с ним дела, но помнится пришлось дорабатывать, так как при тестовых покупках показывало в корзине чёрт знает чего, и Ajax после обновления WC отсутствовал.
Во-вторых, заголовок по ссылке абсолютно не соответствует содержанию статьи. Как-будто речь идёт о создании кнопки на Ajax в карточке товара.
Кнопка "Добавить в корзину" в категориях WC у простого товара и так на Ajiax. И правильнее обозвать заголовок допустим как "Выбор кол-ва товаров на странице категории".
И где там о - + идёт речь?
Рекомендую сперва проверить тестовыми покупками код.
В-третьих, где-то здесь на форуме есть от searchingman код. В нём с правками в файлы WC лезть не нужно. Просто добавляется в functions.php темы несколько строчек. Плохо только что он форму количества в шорткодах и в похожих товарах не показывает.
 
Последнее редактирование:

father

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

father

Новичок
Попробую обойтись без шорткодов, чтобы добавить код от searchingman
 

Xelius

Новичок
Нашел выход из ситуации следующим образом (программисты, покритикуйте):
Взял файл "add-to-cart.php" из "plugins/woocommerce/templates/loop", скопировал в дочернюю тему и внес туда изменения из файла "plugins/woocommerce/templates/single-product/add-to-cart/simple.php". Конкретно взял от туда конструкцию формы с инпутом количества и кнопкой для карточки простого товара.
Было:
PHP:
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

global $product;

echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a href="%s" data-quantity="%s" class="%s add-to-cart-loop" %s><span>%s</span></a>',
        esc_url( $product->add_to_cart_url() ),
        esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 ),
        esc_attr( isset( $args['class'] ) ? $args['class'] : 'button' ),
        isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '',
        esc_html( $product->add_to_cart_text() )
    ),
$product, $args );

Стало:
PHP:
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

global $product;

if ( ! $product->is_purchasable() ) {
    return;
}

echo wc_get_stock_html( $product ); // WPCS: XSS ok.

if ( $product->is_in_stock() ) : ?>

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

    <form class="cart" action="<?php echo esc_url( apply_filters( 'woocommerce_add_to_cart_form_action', $product->get_permalink() ) ); ?>" method="post" enctype='multipart/form-data'>
        <?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" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>" 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' ); ?>
    </form>

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

<?php endif; ?>
 
Сверху Снизу