WooCommerce: Добавление вариативного товара в корзину через пользовательскую ссылку
Я пытаюсь добавить вариативный товар в корзину напрямую через ссылку. Я устанавливаю variation_id через строку запроса. Насколько я могу судить, я отправляю данные точно так же, как это делает стандартная форма вариативного товара.
Вот код внутри моей страницы single-product:
<a href="<?php echo esc_url( $product->add_to_cart_url() ); ?>&variation_id=262" class="rounded-rect-button add-to-cart">Добавить в корзину</a>
При этом простой товар работает нормально. Я установил цены для вариаций товара в админ-панели. Не понимаю, почему это не так просто, как просто отправка данных. Буду благодарен за любую помощь.

В настоящее время я работаю с магазином на WooCommerce версии 2.1.12, и, кажется, они изменили это поведение.
Мой AJAX URL для добавления товаров в корзину должен выглядеть так:
?add-to-cart=[ID-ТОВАРА]&variation_id=[ID-ВАРИАЦИИ]&attribute_[НАЗВАНИЕ-АТРИБУТА]=[SLUG-АТРИБУТА]&attribute_[НАЗВАНИЕ-АТРИБУТА]=[SLUG-АТРИБУТА]
Пример:
http://example.com/store/category/product/?add-to-cart=239&variation_id=240&attribute_pa_size=48-2&attribute_pa_color=gold
Это добавляет конкретный товар в корзину и также устанавливает атрибуты вариации в корзине.
Вы даже можете установить количество, просто добавив &quantity=[ЗНАЧЕНИЕ]
В итоге это очень удобно, так как все эти значения уже установлены в форме отправки / выпадающих списках, вам просто нужно их найти..

Разобрался с этим. Мне не хватало пары параметров, необходимых для добавления вариативного товара в корзину. Отсутствующими параметрами были variation_id
и тип атрибута, на который ссылается variation_id
. ID вариации можно найти в админке > WooCommerce > Товары, на вкладке "Вариации" рядом с созданной вариацией товара.
Параметр атрибута формируется из префикса attribute_
и санитизированного имени атрибута. Например, мой атрибут называется "Цвета в наличии", поэтому параметр типа атрибута у меня — attribute_stock-colors. Насколько я понимаю, вы просто устанавливаете attribute_stock-colors=1
, потому что метод добавления в корзину просто проверяет его наличие.
Вот простой пример ссылки, которая добавляет в мою корзину товар с вариацией ID 261 и цветом из наличия:
<a href="<?php echo esc_url( $product->add_to_cart_url() ); ?>&variation_id=261&attribute_stock-colors=1">Добавить в корзину</a>
Для использования в реальной ситуации вам нужно динамически устанавливать тип атрибута и ID вариации на основе выбора пользователя в выпадающем списке или подобном элементе (если только у каждого товара не одна и та же вариация, что фактически превращает его в простой товар).
