我有一个代码(非常感谢LoicTheAztec),我用它来将变量从URL传递到woocommerce会话,它适用于访问者不需要登录的订单(客人结账)
add_action( 'template_redirect', 'set_custom_variables_wc_session' );
function set_custom_variables_wc_session(){
$src = isset( $_GET['src'] ) ? sanitize_text_field( $_GET['src'] ) : "";
$subid = isset( $_GET['subid'] ) ? sanitize_text_field( $_GET['subid'] ) : "";
WC()->session->set('custom_data',['src' => $src, 'subid'=> $subid]);
}
我在结账页面上做了一个print_r
,他们显示,并为客人结账(不需要登录的订阅)节省了任何问题:
Array
(
[src] => test100
[subid] => 98754
)
但是,如果产品是订阅并且用户已经有一个帐户,WooCommerce会要求用户登录,当他们在结账页面上使用登录表单时,所有这些变量都会从会话中清除。
Array
(
[src] =>
[subid] =>
)
换句话说,在用户登录到结帐页面之后,他们就在同一个页面上结束了,但是所有的会话custom_data
变量都消失了。
我环顾四周,但找不到任何信息,以某种方式保存这些数据,即使用户登录,所以它没有丢失。
如何让当前会话custom_data
保持在原位,即使返回的用户在结帐表单上登录?
我试图寻找一个解决方案来保存custom_data
,但找不到。
1条答案
按热度按时间2admgd591#
你没有以正确的方式做事情,你的代码在重新加载WC会话数据数组值时被清除。请使用以下命令:
代码放在子主题的functions.php文件中(或插件中)。测试和作品。
这一次,WC会话数据将持续存在。
**添加:**WC会话和“访客”用户
下面是一个更好的方法,提前为“访客”用户启用WC会话。通常对于访客用户,WC会话在第一次添加到购物车时启动。
以下代码将提前为访客启用WC会话,允许在所有情况下将自定义数据存储在WC会话中:
代码放在子主题的functions.php文件中(或插件中)。测试和作品。