woocommerce aplicar cupón programáticamente error

2 minutos de lectura

avatar de usuario
José Cámaras

Este es el código que estoy usando:

if (!is_admin()):
add_action( 'woocommerce_before_cart', 'apply_matched_coupons' );
//add_action('woocommerce_before_cart_table', 'apply_matched_coupons');
//add_action('woocommerce_before_checkout_form', 'apply_matched_coupons');

function apply_matched_coupons() {
global $woocommerce;
$coupon_code="somecodehere";

if ( $woocommerce->cart->has_discount( $coupon_code ) ) return;

    if ( $woocommerce->cart->cart_contents_total >= 1 ) {
        $woocommerce->cart->add_discount( $coupon_code );
        wc_print_notices();
    }

}

endif;

El problema que tengo es que cuando voy a la página de pago, el cupón aún se aplica. No se aplica en el carrito, que es el resultado deseado, pero no quiero que se aplique en absoluto en esta condición.

¿Alguna ayuda?

  • Estoy confundido de qué “condición” estás hablando. ¿Puedes explicar usando algún tipo de historia de usuario, tanto el resultado esperado como el que ocurre? es decir, un usuario visita el carrito, sucede X, luego continúa con el pago, sucede Y, etc.

    – rnevio

    16 de noviembre de 2015 a las 1:46

  • @rnevius seguro y ni siquiera estoy seguro de que lo que estoy haciendo funcione porque creo que esto está almacenado en caché de alguna manera. ESTÁ BIEN. Aquí está el panorama general: agregue un código de cupón cuando agregue al carrito. Sin embargo, no aplique el cupón si es administrador o gerente de la tienda en el carrito o en la página de pago. La siguiente etapa, una vez que sé que funciona, es agregarlo aleatoriamente si no es administrador o gerente de la tienda, pero todavía estoy trabajando en ello.

    – José Cámaras

    16 de noviembre de 2015 a las 2:03


avatar de usuario
nevio

Según su explicación, parece que debería estar usando el woocommerce_add_to_cart gancho, que se ejecuta cuando un producto se agrega con éxito al carrito. Tampoco creo que debas usar is_admin()ya que eso solo verifica si está en una página de administración… no si el usuario actual es un administrador.

Yo haría algo como lo siguiente:

add_action( 'woocommerce_add_to_cart', 'apply_matched_coupons' );

function apply_matched_coupons() {
    // If the current user is a shop admin
    if ( current_user_can( 'manage_woocommerce' ) ) return;
    // If the user is on the cart or checkout page
    if ( is_cart() || is_checkout() ) return;

    $coupon_code="somecodehere";

    if ( WC()->cart->has_discount( $coupon_code ) ) return;

    WC()->cart->add_discount( $coupon_code );
}

  • Eres increíble. Incluso puedo ver dónde las cosas se complicaron demasiado por mi parte. Ahora necesito refactorizar para hacer WC()->cart->add_discount( $coupon_code ); ejecutar aleatoriamente. muchas gracias amigo

    – José Cámaras

    16 de noviembre de 2015 a las 2:55

¿Ha sido útil esta solución?