La cookie de sesión de Woocommerce no está configurada en ajax cuando se usa admin-ajax.php

2 minutos de lectura

Tengo una función WordPress ajax que está usando el WC()->sesión para tomar datos de sesión y usarlos en la función. (por ejemplo, tomando el método de envío elegido de la sesión y mostrándolo).

La función funciona correctamente en mi máquina local. Sin embargo, no está funcionando en Servidor en vivo de WP Engine. Ya me he puesto en contacto con ellos y me aconsejaron que el tema no debería estar de su lado.

Por lo que puedo ver, las siguientes cookies no se configuran en el servidor en vivo solo para la solicitud admin-ajax.php:

  • Establecer-Cookie: woocommerce_items_in_cart
  • Establecer-Cookie: woocommerce_cart_hash
  • Establecer-Cookie: wp_woocommerce_session

¿Alguien tiene alguna idea de lo que podría causar este problema?

Avatar de usuario de LoicTheAztec
LoicTheAztec

Esto no es normal y parece estar relacionado con el alojamiento de WP Engine.

Ahora debe intentar forzar la habilitación de la sesión de cliente de Woocommerce (si aún no está habilitada), con el siguiente código que establecerá el WC_Session Galleta.

Podría habilitar la espalda WC()->session cuando usas admin-ajax.php:

add_action( 'woocommerce_init', 'enable_wc_session_cookie' );
function enable_wc_session_cookie(){ 
    if( is_admin() )
       return;

    if ( isset(WC()->session) && ! WC()->session->has_session() ) 
       WC()->session->set_customer_session_cookie( true ); 
}

El código va en el archivo functions.php de su tema secundario activo (o tema activo). Podría funcionar.

Avatar de usuario de Amin
Amín

Con la respuesta aceptada, tendrá una sesión en todas las páginas, lo que genera algunos problemas, como deshabilitar el caché o cargas de página más lentas para los visitantes primerizos. El propio Woocommerce establece esta cookie a pedido y cuando se necesita y la destruye una vez que no se necesita. más, creo que deberías seguir la misma estrategia, configurar la cookie a través de uno de los métodos a continuación y destruirla una vez que hayas terminado. (por ejemplo, cuando se completa el pago del pedido)

WC()->session->set_customer_session_cookie( true );
// OR
do_action('woocommerce_set_cart_cookies', true);

¿Ha sido útil esta solución?