Skip to main content
Wordpress

Añadir cupones automáticamente mediante URL en WooCommerce

Por 20 septiembre, 2021Sin comentarios
Añadir cupones automáticamente mediante URL en Woocommerce

Desarrollar un ecommerce en WordPress siempre lleva implícito una palabra… WooCommerce. Sin duda un plugin que vino para solucionar nuestros problemas, ya no solo por la gran cantidad de posibilidades que ofrece, sino por sus casi infinitas extensiones o add-ons o por su robusto Codex, que proporciona a los desarrolladores más funcionalidades todavía. Pero, a pesar de la gran cantidad de opciones que ofrece el plugin de Woocommerce por defecto, siempre hay situaciones donde necesitemos tirar de plugins externos o snippets que encontremos en diferentes blogs.

El caso del que os voy a hablar en este post es uno de ellas. Si eres desarrollador, sabrás que Woocommerce te da la posibilidad de realizar acciones automáticas como añadir un producto al carrito mediante una URL. Solo hace falta saber el ID del producto, que lo encontraremos en el listado de productos del admin. Un caso práctico:

https://misitioweb.com/?add-to-cart=[ID_PRODUCTO]

Tan solo hay que sustituir [ID_PRODUCTO] por el ID real del producto que queramos que se añada automáticamente mediante el enlace. Suele ser muy útil cuando enviamos campañas mediante email, o landings donde se promociona un producto y queremos ahorrar un paso al cliente. Esta función también nos permite añadir el producto y dirigirle directamente a la página de carrito o checkout. Incluso podemos seleccionar variaciones si es un producto variable. Darle estás facilidades al usuario puede mejorar la conversión:

// Añadir producto y dirigir al carrito
https://misitioweb.com/cart/?add-to-cart=[ID_PRODUCTO]

// Añadir producto y dirigir a finalizar compra
https://misitioweb.com/checkout/?add-to-cart=[ID_PRODUCTO]

// Añadir producto con variación y dirigir a finalizar compra
https://misitioweb.com/checkout/?add-to-cart=[ID_PRODUCTO]&variation_id=[ID_VARIACION]

Pero, recientemente se me presento una nueva opción a petición de un cliente que Woocommerce no contempla. Y es, poder añadir códigos de cupones a la URL para que se apliquen automáticamente junto con el producto. Ideal para newsletters. Si necesitas esta opción, tranquilo, te comparto un par de plugins que te pueden ayudar, o un código para añadir en tu functions.php si quieres ahorrarte instalar plugins.

Si eres más de plugins, te dejo dos opciones, una premium y otra gratuita.
La premium es URL Coupons. En caso de que no tengas muy claro la estructura de la URL que he mencionado antes para añadir productos automáticamente, este es tu plugin. Te genera la URL que necesitas con el cupón que estés creando en ese momento. Además, te permite personalizar la URL a tu gusto: que productos añadir con el cupón, que variaciones y a donde redirigir.
Si no te hace falta que se generen automáticamente las URL, te recomiendo el segundo plugin gratuito, WooCommerce Coupon Links. No requiere ningún ajuste. Simplemente lo instalas y ya. Cuando crees un nuevo cupón, podrás definir una URL para añadir un producto con el cupón. La estructura sería la siguiente:

https://misitioweb.com/checkout/?add-to-cart=[ID_PRODUCTO]&coupon_code=[CODIGO_CUPON]

Pero si no queremos instalar ningún plugin para esto, te dejo el siguiente código o snippet para añadirlo a tu archivo functions.php. Tiene exactamente la misma función que el plugin gratuito. Una vez añadido, podemos definir las URLs con la misma estructura que antes:


function webjr_woocommerce_coupon_links(){

	// Si no existe Woocommerce o no están habilitadas las sesiones
	if ( !function_exists('WC') || !WC()->session ) {
		return;
	}

	/**
	 * Filtrar name de la variable en la Query
	 *
	 * @since 1.0.0
	 *
	 * @param string $query_var Query variable name.
	 */
	$query_var = apply_filters( 'woocommerce_coupon_links_query_var', 'coupon_code' );

	// Si no existe coupon_code en la Query String
	if ( empty( $_GET[$query_var] ) ) {
		return;
	}

	// Establecer una cookie de sesión para mantener el cupón en caso de que el carrito esté vacío.
	WC()->session->set_customer_session_cookie(true);

	// Aplicar cupón ni no está añadido.
	if ( !WC()->cart->has_discount( $_GET[$query_var] ) ) {

		// WC_Cart::add_discount() sanear código cupón.
		WC()->cart->add_discount( $_GET[$query_var] );
	}
}

add_action( 'wp_loaded', 'webjr_woocommerce_coupon_links', 30 );
add_action( 'woocommerce_add_to_cart', 'webjr_woocommerce_coupon_links' );

Eso es todo. Si te ha funcionado o conoces otra alternativa, déjala en tus comentarios. As simple as that…

Jairo Calero

Jairo Calero

Desarrollador web frontend y backend, especialista en webs app desarrolladas en PHP y Javascript. Experto en HTML, CSS3, PHP y Javascript con frameworks y librerías como jQuery, Angular y Bootstrap. Gestor de herramientas SEO como Google Analytics, Search Console, SEMrush o Hotjar. Email marketing y Big data.

Deja tu respuesta