由于我想使用我的插件将项目添加到 woocommerce 购物车,我需要确保会话 cookie 已设置,并在尚未设置时设置 cookie。
这段代码对于前端来说工作得非常好:
add_action('woocommerce_init', 'force_non_logged_user_wc_session');
function force_non_logged_user_wc_session()
{
if (is_user_logged_in() || is_admin())
return;
if (!WC()->session->has_session()) {
WC()->session->set_customer_session_cookie(true);
}
Run Code Online (Sandbox Code Playgroud)
}
不幸的是,我的所有 REST-API 回调不再对访客起作用(REST-API 由 javascript 调用,不需要 WC 会话),但返回以下消息:
致命错误:未捕获错误:在 C:\Users....\wp-content\plugins........php:318 中对 null 调用成员函数 has_session()
问题的原因很可能是 WC 仅在前端页面加载会话处理程序。对于我的需求,这已经足够了,但我不知道如何仅在前端设置 cookie。我只能在标头中设置 cookie,但我如何知道这是来自前端还是 REST API 的请求?
我尝试通过以下检查来处理检查:
if(did_action( 'wp_loaded' ))
并且我尝试将操作添加到其他操作挂钩中:
wp_loaded并且init