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

Guía sobre cómo agregar tarifas personalizadas a WooCommerce Checkout por código

40

Hay algunos casos en los que es posible que deba agregar una tarifa a los totales del carrito. A veces, solo si se cumple una determinada condición, por ejemplo, según los totales del carrito o la ubicación de envío. Con WooCommerce, agregar una tarifa es bastante fácil, mucho más fácil que agregar un descuento, de hecho. En esta publicación, aprenderemos cómo agregar una tarifa personalizada a WooCommerce.

WooCommerce tiene una función integrada en el objeto del carrito para agregar tarifas. Todo lo que necesita es conectarse a la acción correcta y, con el objeto de carrito provisto, llame a una función para agregar una tarifa. WooCommerce mostrará automáticamente las tarifas en el carrito y los totales de pago. Tú decides la etiqueta y el importe de la tarifa.

Guía sobre cómo agregar tarifas personalizadas a WooCommerce Checkout por código

Es importante tener en cuenta que el monto de la tarifa no puede ser negativo, lo que le otorga al cliente un descuento. Este "truco" solía funcionar antes en versiones anteriores de WooCommerce, pero ya no.

¡Entremos en los detalles del código! El único gancho por el que debe preocuparse es woocommerce_cart_calculate_fees. Dentro de este enlace, puede obtener el objeto del carrito llamando a WC()->cart. Con ese objeto puede llamar add_fee()que acepta cuatro parámetros (probablemente solo necesite los dos primeros); add_fee($fee_name, $amount_in_float, $taxable_boolean, $tax_class_string). Los dos primeros se explican por sí mismos. El tercer parámetro es un valor booleano que decide si la tarifa está sujeta a impuestos o no. Y el cuarto es para proporcionar una clase de impuestos para la tarifa (si el tercer parámetro es verdadero). Pero se puede dejar en blanco para la clase de impuestos estándar.

Agregar una tarifa fija

Agregar una tarifa personalizada se realiza en su forma más simple de esta manera:

El primer paso es evitar agregar una tarifa si estamos en administración o si Ajax está en progreso. A continuación llamamos add_fee()al objeto carrito. Esto agregará una tarifa denominada "Una pequeña tarifa" con el valor de 5. El valor será en cualquier moneda que tenga en su tienda. Si la moneda de la tienda se establece en dólares, se convierte en $5. Ajusta el nombre y la cantidad a tus necesidades.

Agregar una tarifa como un porcentaje de los totales del carrito

Si desea que el monto de la tarifa sea un porcentaje de los totales del carrito, solo necesita calcularlo de manera diferente. Recuerde que siempre tenemos acceso al objeto del carrito llamando WC()->carty desde ahí podemos obtener los totales.

El código anterior agregará una tarifa que asciende al 5% del total del carrito, que es el total de artículos del carrito (get_cart_contents_total()) más el costo de envío del carrito (get_shipping_total()). Ajuste la tasa y qué totales incluir o excluir en lo que necesita.

Así que esto está muy bien, pero en algunos casos es posible que deseemos personalizar cuándo agregar una tarifa. Tal vez desee agregar una tarifa solo para un determinado método de envío, método de pago o según el total del carrito. El proceso es el mismo, solo agregamos la tarifa solo si se cumplen nuestras condiciones.

Agregar una tarifa dependiendo de los totales del carrito

Digamos que solo desea agregar una tarifa si los totales del carrito están por debajo de cierta cantidad. Suponga que desea agregar una tarifa por manejar cantidades pequeñas. Podrías hacerlo así:

Úselo WC()->cart->get_cart_contents_total()para obtener el número flotante del total del carrito, sin incluir el envío. (Si también desea incluir el envío, mire arriba al agregar la tarifa porcentual para obtener los totales de envío). Luego haz tus comparaciones.

También puede darle la vuelta y decidir agregar una tarifa si el carrito superó cierto límite.

Agregar una tarifa dependiendo de la ubicación de envío

También puede agregar una tarifa según la ubicación de envío, por ejemplo, por país. De manera similar a obtener el objeto del carrito, podemos usar WC()->customerpara el objeto del cliente. Tenga en cuenta que cuando el cliente no ha iniciado sesión y aún no llegó a la caja y completó su dirección, los valores del objeto del cliente estarán vacíos o los valores predeterminados establecidos en su tienda.

Necesitará saber el código de país: aquí hay una buena referencia de código de país. Este es un ejemplo de cómo agregar una tarifa si el cliente es de Noruega.

Agregar una tarifa según el método de envío elegido

Obtener el método de envío es un poco más complicado ya que depende de la sesión del usuario y no viene en un "formato agradable y comprensible". Puede obtener el método de envío elegido actualmente con WC()->session->get('chosen_shipping_methods'). Tenga en cuenta que dice "métodos" y no "método", por lo que devuelve una matriz. Normalmente, la matriz contiene un elemento, donde cada elemento consta de cadenas de ID de envío, dos puntos y una ID después. Recomiendo usar métodos de cadena PHP para verificar si la cadena contiene la ID, por ejemplo strpos(), y no si es igual.

Agregar una tarifa según el método de pago elegido

Si desea agregar una tarifa según la pasarela de pago elegida, puede obtener la pasarela de pago elegida actualmente WC()->session->get('chosen_payment_method')y hacer una comparación con su nombre (por ejemplo, para Paypal devolvería 'paypal'). Sin embargo, puede notar que cuando el cliente cambia entre las pasarelas de pago en el proceso de pago, la tarifa no se agrega ni elimina dinámicamente. Por lo tanto, deberá agregar Javascript adicional para asegurarse de que WooCommerce actualice el carrito para que su tarifa funcione de manera constante.

Para agregar el Javascript, nos enganchamos al woocommerce_review_order_before_paymentque ocurre justo antes del cuadro de pago en el proceso de pago y generamos el script en línea. Todo lo que hace el código es activar el gancho de WooCommerce update_checkoutcada vez que se cambia la elección del método de pago. Esto garantiza que se ejecuten todos los métodos y ganchos de PHP necesarios (incluido el gancho de pago) cada vez que se actualiza el carrito.

Agregar una tarifa dependiendo de qué productos están en el carrito

Lo mencioné antes, pero lo mencionaré nuevamente: tiene acceso total al objeto del carrito con WC()->cart, por lo que puede buscar en el contenido del carrito un ID de producto específico y agregar una tarifa si existe en el carrito.

El uso WC()->cart->get_cart_contents()devuelve una matriz de todos los productos en el carrito. Puede recorrer esto con un foreachciclo simple y verificar cada producto en la condición deseada, o si simplemente desea verificar las identificaciones, puede extraer todas las identificaciones de productos en una línea de esta manera:

El siguiente ejemplo muestra cómo puede agregar una tarifa dependiendo de que el carrito contenga un producto de una identificación determinada:

También puede usar operaciones similares para extraer cantidades si necesita agregar una tarifa cuando un cliente agrega una cantidad realmente grande de algo.

En conclusión

Esta publicación le ha mostrado cómo agregar una tarifa personalizada y, a través de cinco ejemplos, cómo agregar una tarifa según ciertas condiciones. Estas condiciones fueron todo lo que encontré y pude pensar, y al menos deberían dar pistas sobre cómo obtener información para personalizar aún más sus condiciones. ¡Avíseme si funcionó para usted o si ha encontrado otra condición en la que no pensé!

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