Woocommerce: wc_add_notice () no se agrega a la sesión cuando no hay nada en el carrito

2 minutos de lectura

avatar de usuario
chrispbacon

Tengo un formulario personalizado que llama a una función en function.php cuando se envía. Eventualmente verificará la entrada de los campos y hará algo o enviará un mensaje de error usando el woocommerce wc_add_notice()material estándar.

El problema es que solo parece agregar el aviso a la sesión cuando los artículos se han agregado al carrito en algún momento. Si abro una pestaña de incógnito y pruebo el formulario, no recibiré ningún mensaje. Para que quede claro que estoy usando wc_print_notices()en mi plantilla.

Imprimí la sesión de woocommerce solo para confirmar y sí, no está allí cuando no se ha agregado nada al carrito. He eliminado la función de inmediato, por lo que debería enviar un mensaje de error cuando hace clic en enviar, independientemente de si se completó o no, solo para verificar. Aquí está la función en cuestión:

add_action('wp_ajax_add_transfer', 'process_add_transfer');
add_action('wp_ajax_nopriv_add_transfer', 'process_add_transfer');
function process_add_transfer() {
     global $woocommerce;
     wc_add_notice( 'This is my custom error', 'error' );
     wp_redirect( get_permalink(125) ); //this is the same page form is on
}

enlace a la página aquí

He buscado y buscado y no he encontrado lo que estoy haciendo incorrectamente o por qué esto no funciona, se agradece cualquier ayuda.

saludos chris

Ok, ¡entonces lo descubrí! Parece que woocommerce 2.1> no establece una cookie hasta que se usa el carrito, para ayudar con el almacenamiento en caché o algo así. Aquí hay un hilo sobre ello: https://github.com/woothemes/woocommerce/issues/4920

La solución para mí fue agregar esto a mi función:

do_action( 'woocommerce_set_cart_cookies',  true );

Espero que esto ayude a alguien más.

  • Eres un maldito salvador!!!!! Busqué durante horas para arreglar esto, luego encontré esto y ¡bingo!

    – Jobst

    8 de octubre de 2019 a las 7:27

  • Me alegro de que haya ayudado a alguien 🙂

    – chrisPbacon

    8 de octubre de 2019 a las 11:53

Solo está agregando los avisos de error aquí. Guardará estos errores en la sesión. Ahora, para mostrar estos avisos de error, debe usar la siguiente función en la página en la que está trabajando o desde el envío de la solicitud ajax:

wc_print_notices();

  • Hola, gracias por la respuesta y lo siento si no fui claro, pero lo tengo en mi plantilla. El problema parece ser que no está en la sesión. Pero después de analizar esto un poco más, no se trata de si ha iniciado sesión o no, sino de si ha agregado o no algo al carrito en algún momento de su sesión. ¿Quizás hay algo que deba hacer para iniciar una sesión sin que alguien agregue al carrito?

    – chrisPbacon

    25 de febrero de 2016 a las 8:48

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad