Agregar producto variable a WooCommerce desde un enlace personalizado
Estoy tratando de agregar un producto variable a mi carrito directamente a través de un enlace. Estoy configurando el variation_id con la cadena de consulta. Por lo que puedo ver, estoy enviando los datos exactamente de la misma manera que lo hace el formulario predeterminado de productos variables.
Aquí está el código dentro de mi página single-product:
<a href="<?php echo esc_url( $product->add_to_cart_url() ); ?>&variation_id=262" class="rounded-rect-button add-to-cart">Agregar al carrito</a>
Por el contrario, el producto simple funciona bien. He establecido precios para mis variaciones de producto en el administrador. No estoy seguro de por qué no es tan simple como enviar los datos. Cualquier ayuda sería muy apreciada.

Actualmente trabajo en una tienda WooCommerce v2.1.12 y parece que han cambiado ese comportamiento.
Mi URL AJAX para agregar productos al carrito debe verse así:
?add-to-cart=[PRODUCTO-ID]&variation_id=[VARIACION-ID]&attribute_[NOMBRE-ATRIBUTO]=[SLUG-ATRIBUTO]&attribute_[NOMBRE-ATRIBUTO]=[SLUG-ATRIBUTO]
Ejemplo:
http://example.com/store/category/product/?add-to-cart=239&variation_id=240&attribute_pa_size=48-2&attribute_pa_color=gold
Esto agrega un producto específico al carrito y también establece los atributos de variación en el carrito.
Incluso puedes establecer la cantidad simplemente agregando &quantity=[VALOR]
Al final esto resulta útil ya que todos estos valores se establecen dentro del formulario de envío / campos de selección, solo tienes que buscarlos...

Descubrí cómo resolver esto. Me faltaban un par de parámetros necesarios para agregar un producto variable a mi carrito. Los parámetros que faltaban eran el variation_id
y el tipo de atributo al que se refiere el variation_id
. El ID de variación se puede encontrar en el administrador > WooCommerce > Productos y en la pestaña de variaciones junto a la variación de producto que hayas creado.
El parámetro del atributo se forma con el prefijo attribute_
seguido del nombre del atributo sanitizado. Por ejemplo, mi atributo se llama Colores de Stock, así que mi parámetro de tipo de atributo es attribute_colores-de-stock. Por lo que puedo ver, simplemente configuras attribute_colores-de-stock=1
porque el método de agregar al carrito solo verifica que exista.
Aquí hay un ejemplo simple de un enlace que agrega un producto a mi carrito con la variación ID 261 de colores de stock:
<a href="<?php echo esc_url( $product->add_to_cart_url() ); ?>&variation_id=261&attribute_colores-de-stock=1">Agregar al Carrito</a>
Para usar esto en una situación real, necesitarías configurar el tipo de atributo y el ID de variación dinámicamente a partir de las opciones que el usuario seleccionó en un menú desplegable o algo similar (a menos que cada producto tenga la misma variación, lo que básicamente lo convertiría en un producto simple).
