WooCommerce - Añadir un producto al carrito programáticamente mediante JS o PHP

25 may 2012, 16:44:28
Vistas: 125K
Votos: 38

Estoy utilizando el plugin WooCommerce para implementar una pequeña parte de comercio electrónico en un sitio y necesito añadir productos a su carrito mediante alguna llamada o función en lugar de usar sus propios botones 'añadir al carrito'.

Con esto me refiero básicamente a enviar a WooCommerce un SKU y una cantidad, por ejemplo, y que el carrito se actualice.

sendToCart('123456', 55);

etc

He revisado la documentación y no puedo encontrar una referencia a este tipo de funcionalidad. ¿Alguien puede sugerir cómo podría lograr esto?

10
Comentarios

Cerrado por votación como demasiado localizado. ¿Has probado con el soporte de WooThemes?

Chip Bennett Chip Bennett
25 may 2012 17:04:28

@Chip Bennett Sí, lo he intentado, pero desafortunadamente cobran $125 dólares solo por registrarse. Esto entra dentro del ámbito de WordPress y WooCommerce, que es una etiqueta válida aquí, así que ¿no debería ser válido? ¿O estoy malinterpretando lo de 'demasiado localizado'?

Larry B Larry B
25 may 2012 17:21:15

Esta pregunta no tiene nada que ver específicamente con WordPress. Solo involucra al plugin WooCommerce en sí mismo: funcionalidad del plugin y funciones/código personalizado del plugin. Podría haber votado para cerrarla como fuera de tema, pero suelo usar demasiado localizado para preguntas sobre productos comerciales o productos que tienen opciones de soporte comerciales.

Chip Bennett Chip Bennett
25 may 2012 17:27:21

@ChipBennett WooCommerce es solo para WordPress, así que parece extraño categorizarlo como algo que no tiene nada que ver con WordPress. ¿Cómo se usaría la etiqueta WooCommerce si no es para hacer una pregunta sobre WooCommerce? De cualquier manera, ya encontré la respuesta que publicaré ahora por si alguien más tiene el mismo problema.

Larry B Larry B
25 may 2012 17:46:28

No dije que WooCommerce no tuviera nada que ver con WordPress, sino que tu pregunta específica no tenía nada que ver con WordPress. La diferencia entre ambos es crucial.

Chip Bennett Chip Bennett
25 may 2012 17:47:49

@ChipBennett Bueno, tendría que estar en desacuerdo. ¿Por qué existe una etiqueta WooCommerce si no es para hacer preguntas sobre WooCommerce? WooCommerce no es independiente de ninguna manera, por lo que cualquier cosa relacionada con WooCommerce es pertinente para WordPress. Pero esa es solo mi opinión, por supuesto.

Larry B Larry B
25 may 2012 17:57:07

Por favor, lee las Preguntas Frecuentes sobre el alcance de las preguntas para WPSE: "Ten en cuenta que no manejamos preguntas... que no sean específicas de WordPress (incluso si ocurren en su contexto)." Solo porque WooCommerce se ejecute en el contexto de WordPress no significa que cada pregunta sobre WooCommerce esté dentro del alcance de WPSE.

Chip Bennett Chip Bennett
25 may 2012 18:03:05

Por favor, publica respuestas como respuestas, no como ediciones a la pregunta original. Por favor, lee las Preguntas Frecuentes para que entiendas cómo funcionan los sitios de Preguntas y Respuestas de StackExchange.

Chip Bennett Chip Bennett
25 may 2012 18:18:33

Tengo que esperar 8 horas ya que mi reputación es menor a 10, así que lo haré entonces.

Larry B Larry B
25 may 2012 18:56:01

@GHarping Gracias por hacer esta pregunta, aunque hayas recibido un montón de críticas por ello. :)

Ryan Ryan
9 ene 2013 06:42:35
Mostrar los 5 comentarios restantes
Todas las respuestas a la pregunta 2
2
37

OK, así es como lo solucioné al final. Un ejemplo rápido y sencillo, usa JQuery.

<a id="buy" href="#">¡Compra esto!</a>
    <script>    
       $('#buy').click(function(e) {
          e.preventDefault();
          addToCart(19);
          return false;
       });    

       function addToCart(p_id) {
          $.get('/wp/?post_type=product&add-to-cart=' + p_id, function() {
             // callback
          });
       }
    </script>

Esto simplemente hace una petición AJAX GET a la URL del carrito

/wp/?post_type=product&add-to-cart=[ID_DEL_PRODUCTO]
28 may 2012 18:54:28
Comentarios

esto ya no funciona (wc v2.1.12). Encontré una solución y la compartí aquí

honk31 honk31
28 ago 2014 12:15:58

He utilizado este tutorial que me ayudó a lograr lo que necesitaba: https://wpharvest.com/add-product-to-cart-programmatically-in-woocommerce/

Dragos Micu Dragos Micu
22 mar 2020 15:03:25
2
37

En PHP lo logré hacer de esta manera:

global $woocommerce;
$woocommerce->cart->add_to_cart($product_id);

El método está en woocommerce/classes/class-wc-cart.php:

    /**
     * Añade un producto al carrito.
     *
     * @param string $product_id contiene el ID del producto a añadir al carrito
     * @param string $quantity contiene la cantidad del artículo a añadir
     * @param int $variation_id
     * @param array $variation valores de atributos
     * @param array $cart_item_data datos adicionales del artículo que queremos pasar
     * @return bool
     */
    public function add_to_cart( $product_id, $quantity = 1, $variation_id = '', $variation = '', $cart_item_data = array() ) {
30 ago 2013 14:41:34
Comentarios

¿Cómo podría llamar a ese método mediante ajax?

Luca Reghellin Luca Reghellin
11 dic 2013 21:21:23

@Stratboy utilizando la forma recomendada de agregar funciones AJAX en Wordpress: https://codex.wordpress.org/AJAX_in_Plugins - básicamente solo necesitas insertar las 3 líneas de la respuesta en el primer ejemplo php del codex de wordpress.

CodeBrauer CodeBrauer
14 nov 2016 18:45:40