只需尝试在自定义结帐模板中逐页存储和检索未注册的客户数据。我已将其删除,以试图找出问题所在。
此
<?php
$customer = WC()->customer;
$customer->set_billing_first_name("WORKING!!!");
$customer->save();
var_dump($customer->get_billing());
?>
输出
array (size=2)
'country' => string 'US' (length=2)
'first_name' => string 'WORKING!!!' (length=10)
但是然后这个
<?php
$customer = WC()->customer;
//$customer->set_billing_first_name("WORKING!!!");
//$customer->save();
var_dump($customer->get_billing());
?>
输出
array (size=1)
'country' => string 'US' (length=2)
即使我仍然应该坚定地参加同一个会议,因此应该获取存储在评论之前的数据。我所做的就是在注释掉这两行之后刷新页面。
我完全不理解这些方法吗?
已选中
环境的配置完全正确。甚至有人替我仔细检查了一下。网址,缓存等。
登录后它确实可以工作,但是绝大多数用户从未这样做过,这并不是很有帮助。
已在两台不同的服务器(一台本地,一台远程)上尝试了此操作,但问题相同。
从全新安装WP + WC开始,创建了一个空白主题functions.php,它在初始化代码上执行了上述操作。完全相同的问题。
答案 0 :(得分:2)
如果$customer->save()
不保留您对客户数据所做的更改(例如$customer->set_billing_first_name('Test')
),则可能是因为客户未注册到站点或未登录,其中{ {1}}是$customer->get_id()
。
这是正常的,因为需要用户的ID或会话的ID才能正确保存更改并使其在不同页面上持久保存。
因此,当用户未注册/登录时,WooCommerce直到用户登录或他/她将产品添加到购物车后才开始会话。
但是您可以手动启动会话,如下所示:(将代码添加到活动主题的0
文件中)
functions.php
然后,只要在浏览器中启用了 cookies ,对客户数据的更改便会继续到其他页面上,因为与WordPress一样,WooCommerce会存储其会话ID(用户ID)或Cookie中的自动生成的ID /哈希值-会话ID用于设置/获取数据库中的会话数据-如果没有任何表前缀,则表名称为add_action( 'woocommerce_init', function(){
if ( ! WC()->session->has_session() ) {
WC()->session->set_customer_session_cookie( true );
}
} );
。
在启动WooCommerce会话后尝试以下操作:
woocommerce_sessions
这是一个-您应该在每次加载页面时看到一个新日期:(嗯,您之前设置的日期)
$customer = WC()->customer;
// Change 'Test' if necessary - e.g. 'Something unique 123'
if ( 'Test' !== $customer->get_billing_first_name() ) {
$customer->set_billing_first_name( 'Test' );
echo 'First name added to session<br>';
} else {
echo 'First name read from session<br>';
}
答案 1 :(得分:0)
您是否正在使用Wordpress中设置的网址?似乎它基于应用程序中配置的url(而不是实际的URL)存储cookie。
希望这会有所帮助。