Recientemente uno de nuestros clientes, Bestway, nos solicitó un plugin personalizado para enviar a Salesforce los nuevos registros a su newsletter y los carritos abandonados. Además debería generar un cupón de descuento exclusivo para cada nuevo registro confirmado en la newsletter.
Hasta ahí todo bien, fabricamos todo el código necesario y vinculamos los registros generados con Avada Form, creamos un webhook para recepcionar información desde Salesforce sobre la confirmación de los registros para poder activar el cupón previamente creado y enviado a Salesforce y redireccionar al cliente a la página de aterrizaje correspondiente según el idioma en el que registró, y enviamos los carritos abandonados de WooCommerce, y todo ello lo realiza en tiempo real y en segundo plano sin que afecte en forma alguna a la usabilidad o al rendimiento del sitio web.
El problema nos surgió cuando el cliente nos requiere la necesidad de crear una URL para que el cliente pudiera recuperar ese carrito abandonado fácilmente.
Como bien sabréis para ello existe una cadena de consulta que se puede pasar por URL y añade un producto al carrito. En WooCommerce Custom “Add to Cart” URLs – The Ultimate Guide tenéis una fantástica guía para aprender a usar los parámetros add-to-cart y quantity. El problema es que esta consulta no permite añadir nada más que un único producto y una cantidad concreta de unidades para dicho producto, pero nosotros necesitábamos añadir más de un producto y sus cantidades pertinentes para cada uno de ellos.
Buscando por Internet dimos con un fantástico código: WooCommerce: Allow adding multiple products to the cart via the add-to-cart query string, pero no terminaba de servirnos fundamentalmente por uno de los requisitos del cliente, que además de poder añadirse los productos por su ID se pudieran añadir por su SKU.
Además resulta que el código compartido en esta publicación tiene algunos errores y no funciona por lo que el carrito no se rellena nunca.
Manos a la obra
Conocidas las necesidades del cliente y los problemas detectados en el código de base creado por Justin Sainton nos ponemos manos a la obra y fabricamos el siguiente código:
Donde además de añadir la posibilidad de utilizar el SKU en lugar del ID del producto, corregimos todos los errores que detectamos en la función woo_hack_invoke_private_method, por lo tanto este código es totalmente operativo y funcional, no devuelve ningún tipo de error y genera el carrito sin ningún tipo de problema.
Con este código añadido en tu plugin personalizado o en tu fichero functions.php del tema hijo, ahora puedes pasar una URL del estilo a https://dominio.ext/checkout?add-to-cart=XXX:x,YYY:y,ZZZ:z en tu sitio web, donde los valores XXX, YYY y ZZZ son IDs o SKUs de producto y los valores x, y y z son las cantidades de cada uno de los productos. Con él en tu sitio web verás que esa URL te redirecciona «mágicamente» al checkout de tu tienda online con todos los productos y sus cantidades correspondientes añadidas al mismo y a la espera de los datos del formulario de facturación para poder finalizar la compra.
Pero ¿cómo fabrico esa URL desde PHP?
Nosotros utilizamos AJAX para generar el envío de los datos del carrito abandonado a Salesforce, entre los que se incluye la URL que generamos en tiempo real.
Un ejemplo sencillo para poder crear esta URL sería esta pequeña función PHP:
Esta sencilla función devolverá una URL con el protocolo, el nombre de dominio y la ruta del checkout de tu tienda virtual, seguido del listado de IDs de productos y cantidades a añadir dentro del parámetro add-to-cart.
Así de sencillo es generar una URL dinámica que es capaz de añadir un pedido completo a tu tienda online.
Esperamos que os resulte útil este código y quedamos a la espera de vuestros comentarios.
Artículos relacionados
Comentarios




