使用admin-ajax.php时,没有在ajax上设置Wooccommerce会话cookie



我有一个Wordpress ajax函数,它使用WC((->session获取会话数据并在函数中使用(例如从会话中选择运输方式并显示(

该功能在我的本地机器上正常工作。但是,它不适用于WP Engine实时服务器。我已经联系了他们,他们建议这个问题不应该站在他们一边。

据我所见,以下cookie并不是仅针对admin-ajax.php请求在实时服务器上设置的:

  • 设置Cookie:woocommerce_items_in_cart
  • 设置Cookie:woocommerce_cart_hash
  • 设置Cookie:wp_woocommerce_session

有人知道是什么原因导致了这个问题吗?

这是不正常的,似乎与WP引擎托管有关。

现在,您应该尝试强制启用Wooccommerce客户会话(如果尚未启用(,并使用以下代码设置WC_Sessioncookie。

使用admin-ajax.php:时可以启用回WC()->session

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 ); 
}

代码位于活动子主题(或活动主题(的functions.php文件中。这是可行的。

有了被接受的答案,你将在所有页面上都有一个会话,这会导致一些问题,比如禁用缓存或第一次访问的页面加载速度较慢,Wooccommerce自己会按需设置这个cookie,当需要它时,我认为你应该遵循同样的策略,通过以下方法之一设置cookie,并在你用完后销毁它。(例如,当订单付款完成时(

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

最新更新