WordPress / WC会话未进行到下一页

时间:2018-11-08 03:42:42

标签: php wordpress session woocommerce

只需尝试在自定义结帐模板中逐页存储和检索未注册的客户数据。我已将其删除,以试图找出问题所在。

<?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)

即使我仍然应该坚定地参加同一个会议,因此应该获取存储在评论之前的数据。我所做的就是在注释掉这两行之后刷新页面。

我完全不理解这些方法吗?


已选中

  1. 环境的配置完全正确。甚至有人替我仔细检查了一下。网址,缓存等。

  2. 登录后它确实可以工作,但是绝大多数用户从未这样做过,这并不是很有帮助。

  3. 已在两台不同的服务器(一台本地,一台远程)上尝试了此操作,但问题相同。

  4. 从全新安装WP + WC开始,创建了一个空白主题functions.php,它在初始化代码上执行了上述操作。完全相同的问题。

2 个答案:

答案 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。

希望这会有所帮助。

来源:$wgObjectCacheSessionExpiry