✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo agregar mediante programación un descuento personalizado a WooCommerce Checkout

98

En esta publicación, veremos cómo agregamos descuentos programática y automáticamente. Para hacer esto, utilizamos la funcionalidad de cupones de WooCommerce, pero la hacemos automática y ocultamos el hecho de que es un cupón para los clientes. He tratado de mantener el código lo más general posible ya que las condiciones para aplicar los descuentos pueden variar mucho para cualquiera que lea esto.

Por qué los cupones son la forma de hacerlo

En versiones anteriores de WooCommerce, teníamos algunas opciones ("hackish") para agregar descuentos con código; por ejemplo, proporcionar un número negativo add_fee()o trabajar con get_discounted_price(). Lamentablemente, estos métodos ya no funcionan o se consideran heredados y se eliminarán en versiones posteriores. La forma estructuralmente buena de agregar descuentos es usar la funcionalidad de cupones integrada en WooCommerce.

Sin embargo, un cupón generalmente no se puede aplicar automáticamente a un carrito. Requiere que el cliente ingrese manualmente un código de cupón que debe haber recibido. En algunas tiendas web, solo desea que se aplique un descuento automáticamente cuando se cumple una determinada condición sin que el cliente tenga que hacer nada. Eso es lo que arreglaremos usando código.

Descuentos personalizados con cupones

Deberá crear un cupón con un código y configurarlo con los parámetros que desee. Podrá aplicarlo, eliminarlo y cambiar diferentes salidas donde el cupón sea visible para el cliente. Opcionalmente, si en realidad no desea cupones disponibles para los clientes en su tienda web, veremos algunos trucos simples para ocultar las opciones para ingresar códigos de cupón manualmente.

En el ejemplo de código a continuación, estoy agrupando todo el código relacionado en una clase de PHP. Esto ayuda a tener un código más limpio, pero es especialmente útil porque queremos referirnos al código de cupón varias veces. Definirlo como una variable de clase es mejor que repetirlo en múltiples funciones.

Crea tu descuento como cupón

El primer paso es crear el cupón que será el "marcador de posición" de su descuento. Lo más fácil es simplemente crear uno en el administrador de WooCommerce (WooCommerce> Cupones> Agregar cupón).

Si desea crear el cupón programáticamente, un cupón es en realidad una publicación con la que puede crear wp_insert_post(), pero debe tener cuidado de crear su publicación de cupón solo una vez. WooCommerce tiene una breve guía sobre cómo crear un cupón programáticamente.

Proporcione un slug único como su código de cupón y, como mínimo, configure el monto del descuento (ya sea un porcentaje o una tarifa fija). En cuanto al ejemplo de código a continuación, he creado un código de cupón ‘ example‘ (sin embargo, recomiendo usar un nombre más creativo y apropiado para el suyo).

Creando la clase de PHP que contendrá todo nuestro código

¡Vamos finalmente a la codificación! Puede definir esta clase directamente dentro del functions.phpcódigo del complemento de su tema o en un archivo separado incluido.

class AWPCustomDiscount { private $coupon_code = 'example';   public function __construct() {   } } new AWPCustomDiscount();

Asigne a su clase el nombre que desee y reemplace la variable de clase $coupon_codecon el nombre que haya asignado a su cupón. No olvide inicializar la clase después del final (new AWPCustomDiscount()).

Si antes ha programado orientado a objetos, esto le resultará familiar. Si no, no se preocupe, esto debería ser fácil de seguir. Agregaremos algunas funciones aquí y nos referiremos al código de cupón con $this->coupon_code. Comencemos con el código responsable de agregar el cupón cuando se cumplen las condiciones.

Aplicar cupón programáticamente

Por experiencia, he aprendido que enganchar el código para aplicar y quitar cupones funciona mejor y de manera más consistente usando los siguientes dos ganchos; uno para el carrito (woocommerce_before_cart) y otro para la caja (woocommerce_before_checkout_form).

Dentro de la función, todo lo que tenemos que hacer es verificar las condiciones que queremos. WooCommerce ofrece funciones para obtener el objeto del carrito with WC()->cartque podemos usar para obtener toda la información que necesitamos sobre el carrito, como sus artículos y totales. Como ejemplo, el siguiente código aplicará un descuento si el total del carrito (excluyendo cualquier descuento) está por encima de cierta cantidad.

También debemos asegurarnos de que si no se cumplen las condiciones, debemos eliminar el descuento si se agregó previamente. En nuestro ejemplo, imagine que el cliente excedió la cantidad máxima, pero luego fue al carrito, eliminó algunos artículos y, por lo tanto, volvió a estar por debajo de la cantidad requerida. Como los cupones no se aplican automáticamente, los cupones aplicados también deben eliminarse programáticamente.

Usandoapply_coupon

Los cupones se agregan al objeto del carrito apply_coupon()proporcionando el código de cupón como parámetro y se eliminan del objeto del carrito remove_coupon()con el código de cupón como parámetro. Suficientemente simple. También podemos utilizar la función tan acertadamente nombrada get_applied_coupons()en el objeto del carrito para comprobar si nuestro cupón ya se ha aplicado.

Si no está familiarizado con el uso de PHP orientado a objetos en WordPress; aquí hay un resumen rápido de cómo funciona lo anterior: La __construct()función se ejecutará cada vez que se inicialice la clase, lo que hacemos inmediatamente después de la clase. En el interior __construct(), por lo general, agregará todos los ganchos como lo haría normalmente, por ejemplo, en el interior functions.php. Para que WordPress encuentre nuestras funciones dentro de nuestra clase, debemos indicarle al enlace que se refiera a una función definida en una matriz que consiste en $this(el objeto de la clase) y el nombre de la función.

Dentro de la función addDiscount()programamos en nuestras condiciones. En el ejemplo anterior, busco el uso total del carrito WC()->cart->get_subtotal()y lo comparo con mis condiciones, por encima de 500.

Nota: si necesita obtener y comparar los totales del carrito, tenga en cuenta que la mayoría de los totales son cupones incluidos. Por ejemplo los más familiares WC()->cart->get_cart_contents_total()le devolverán el total antes del envío pero con los descuentos incluidos; lo que significa que si su descuento se aplicó anteriormente, este total será incorrecto para comparar.

Puede llamar apply_coupon()sin verificar si el cupón ya se ha aplicado (la ifverificación en la línea n. ° 14), porque la función apply_coupon()misma se asegurará de no volver a agregarlo si se aplicó antes. Sin embargo, esta ifverificación evita que el cliente reciba un mensaje de error que dice "El cupón ya se ha aplicado" cada vez que se actualiza el carrito.

Así es como aparecerá su descuento en los totales del carrito en carrito y pago:

Cómo agregar mediante programación un descuento personalizado a WooCommerce Checkout

Sus condiciones de descuento

Las condiciones de su cupón dependen completamente de usted y sus necesidades. Configuré algunas condiciones de ejemplo para agregar una tarifa personalizada en una publicación anterior, por ejemplo, según la ubicación de envío o qué productos están en el carrito. También puede comparar la fecha de hoy si desea otorgar un descuento especial de Navidad o Halloween, u otorgar un descuento basado en las condiciones del cliente que inició sesión.

Si prefiere aplicar el cupón según la configuración que haya establecido en el cupón mismo, por ejemplo, excluir o incluir ciertas ID de productos, también puede hacerlo. Puede instanciar un objeto del cupón desde el código del cupón, así:

Con ese objeto de cupón, tiene acceso a todas las funciones para obtener cualquier configuración que haya establecido en el cupón. Por ejemplo, obtener ID de productos que deben incluirse para el cupón:

Consulte la documentación de la clase WC_Coupon para ver cómo puede obtener lo que necesita.

Arreglar la etiqueta visible del cupón

El cupón ya debería agregarse y eliminarse cuando su carrito cumpla o no cumpla con las condiciones establecidas en addDiscount(). Sin embargo, en la tabla de totales tanto en el carrito como en el pago, el descuento se muestra como "Cupón: ejemplo" (o cualquiera que sea su código de cupón). ¡Eso no es bueno! Afortunadamente, es fácil cambiar esta etiqueta usando el filtro woocommerce_cart_totals_coupon_label. Agregaremos el filtro a nuestro __construct()y definiremos una función:

Con el filtro obtenemos acceso al objeto cupón como segundo parámetro. Con el objeto de cupón podemos verificar su propiedad, codesi coincide o no con nuestro código de cupón personalizado. Si es así, devolvemos la etiqueta que queramos. Ajuste la salida de la etiqueta a lo que quiera. De lo contrario, devolvemos la etiqueta de cupón predeterminada.

Eliminar la opción de usuario para eliminar el descuento

Otra cosa que puede haber notado en la pantalla de nuestro descuento en el carrito y el pago es que tiene un enlace "[Eliminar]" después de su monto. Este es el comportamiento predeterminado de los cupones en WooCommerce, pero en nuestro caso no es deseable. Tanto porque podría confundir a los clientes como porque nuestro código lo volvería a aplicar después de eliminarlo.

WooCommerce proporciona el filtro woocommerce_cart_totals_coupon_htmlpara la salida de la cantidad. Afortunadamente, WooCommerce proporciona la salida HTML de solo la cantidad como tercer parámetro para este filtro. Simplemente podemos devolver esto en lugar de asegurarnos de que nuestro descuento se presente correctamente con la moneda y todo.

Opcional: Ocultar la función de cupón para los clientes

Los cupones deben activarse en WooCommerce para que funcione nuestra funcionalidad de descuento, pero tenga en cuenta que esto agregará la opción para que los clientes ingresen manualmente los códigos de cupón tanto en el carrito como en el pago. Si no desea mostrar que su tienda web tiene la funcionalidad de cupones y, especialmente, no permitir que los clientes ingresen códigos de cupones manualmente, también puede hacerlo.

Eliminarlo de la caja

Eliminar la función de cupón del pago es fácil y se puede hacer dentro de nuestra clase. Simplemente quitamos el gancho que representa la “caja" del cupón, así:

... public function __construct() { add_action('woocommerce_before_cart', [$this, 'addDiscount']); add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']); add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2); add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3); remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10); } ...

Quitarlo del carrito

Desafortunadamente, eliminar la funcionalidad del código de cupón en el carrito no es tan fácil como está codificado en una plantilla. Deberá anular la plantilla del carrito de WooCommerce para eliminar la funcionalidad del cupón. Copie el archivo pluginswoocommercetemplatescartcart.phpen your-themewoocommercecartcart.php.

Los archivos de plantilla de WooCommerce cambian constantemente, por lo que darte un número de línea exacto no ayudaría. Pero encontrará el código que genera la entrada y el botón para el cupón cerca de la parte inferior del archivo; luciendo algo así:

Lo que debe hacer es comentar la salida relacionada con el cupón. Recomiendo agregar un comentario de PHP /*justo antes de if-check y cerrarlo */justo después del paréntesis de cierre. Al igual que:

¡En este punto, la funcionalidad de cupones de su tienda web debería estar prácticamente oculta para los clientes! Pero su descuento personalizado debería funcionar perfectamente bien.

Fuente de grabación: awhitepixel.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More