WooCommerce:当客户离开然后回来时如何保留结帐信息?

Posted

技术标签:

【中文标题】WooCommerce:当客户离开然后回来时如何保留结帐信息?【英文标题】:WooCommerce: How to retain checkout info when client leaves then comes back? 【发布时间】:2016-09-24 09:29:33 【问题描述】:

有没有简单的方法或插件来保留客户离开和回来后输入的结帐信息?

This plugin 保留“客户来回导航时的字段信息”,但是它最近有很多差评,所以我认为我不会将其用于生产。有什么替代建议吗?

【问题讨论】:

【参考方案1】:

由 LoicTheAztec 截断的 Functions.php 对我不起作用。

我发现这个插件可以记住我在 Woocommerce 结帐中输入或选择的所有内容,包括运输字段和我对模板的自定义添加:

Save Abandoned Carts – WooCommerce Live Checkout Field Capture

帐户密码,如果在结帐时创建,自然不会被记住。

【讨论】:

【参考方案2】:

https://github.com/kugaevsky/jquery-phoenix/ 似乎是这个问题的完美答案。

【讨论】:

是的,正如我在更新的答案中所建议的那样,它使用 html5 Web Storage API 使用localstorage,但您也需要一些php / wp_ajax 来实现这一点。一个真正的开发的东西。【参考方案3】:

----更新----

下面的代码可以工作,但前提是提交数据!

唯一可能的方法是在结帐字段和 worpress Ajax 上检测 javascript/jQuery 表单事件:

使用 ajax 连接到一些会话瞬态函数(如下代码所示)。 使用 (javascript) 网络存储:localStorage, sessionStorage...

我在this thread 中发现了一些真正有趣的代码,它们使用会话瞬态来存储结帐数据。

// this function sets the checkout form data as session transients whenever the checkout page validates
function set_persitent_checkout ( $a ) 
    $arr = array();
    foreach ( $a as $key => $value )
        if ( ! empty($value) )
            $arr[$key] = $value;

    WC()->session->set( 'form_data', $arr );
    return $a;

add_action( 'woocommerce_after_checkout_validation', 'set_persitent_checkout' );


// this function hooks into woocommerce_checkout_get_value to substitute standard values with session values if present
function get_persistent_checkout ( $value, $index ) 
    $data = WC()->session->get('form_data');
    if ( ! $data || empty($data[$index]) )
        return $value;
    return is_bool($data[$index]) ? (int) $data[$index] : $data[$index];

add_filter( 'woocommerce_checkout_get_value', 'get_persistent_checkout', 10, 2 );


// This is a fix for the ship_to_different_address field which gets it value differently if there is no POST data on the checkout
function get_persitent_ship_to_different ( $value ) 
    $data = WC()->session->get('form_data');
    if ( ! $data || empty($data['ship_to_different_address']) )
        return $value;

    return is_bool($data['ship_to_different_address']) ? (int) $data['ship_to_different_address'] : $data['ship_to_different_address'];

add_action( 'woocommerce_ship_to_different_address_checked', 'get_persitent_ship_to_different' );

将此代码添加到位于活动子主题或主题中的functions.php 文件中。

作者的解释:

1.保存表单数据:

第一个函数set_persitent_checkout 挂钩到woocommerce_after_checkout_validation

每当触发该挂钩时,任何当前表单数据都会通过 WC_Session_Handler 类(最近在 2.5 版中更新以提高效率)保存为 WordPress 瞬态。

2。检查重新加载时保存的数据:

接下来我们挂钩woocommerce_checkout_get_value with get_persitent_checkout。顾名思义,我们在这里检查会话瞬态,如果找到,则返回当前字段的任何匹配项。

3.让ship_to_different_address 工作:

唯一困难的是ship_to_different_address 字段,它通过不同的方法获取其值。

为了解决这个问题,添加了最终功能。这与前一个函数的工作方式完全相同,但与woocommerce_ship_to_different_address_checked 挂钩。

你有它。如果在结帐时每次更新字段后都保存数据会很好,但woocommerce_after_checkout_validation 钩子会触发足以捕获所有重要点的数据。

【讨论】:

感谢@LoicTheAztec。但似乎没有任何效果:一旦我访问网站的另一个页面并返回结帐页面,我在字段中输入的内容就消失了。 天哪,谢谢!这似乎是迄今为止在网上记录的唯一有效的解决方案。 WooCommerce 在提交后没有为匿名用户存储结帐表单值,因此当刷新或重新加载结帐页面时,结帐表单用户输入在我的多步骤结帐实现中丢失。我确实认为这是 WooCommerce Core 中的一个错误,并且会在时间允许的情况下尽快提交相应的问题(此客户用户输入表单值的疯狂最近出乎意料地吸了一整天)。特别感谢收货地址复选框的花絮!

以上是关于WooCommerce:当客户离开然后回来时如何保留结帐信息?的主要内容,如果未能解决你的问题,请参考以下文章

当他们使用 WooCommerce 进行购买时,如何将客户帐单信息添加到 MailChimp 组

JQM Filterable Widget:如何在离开页面时清除?

当用户在 WooCommerce 中登录/注销时,如何防止清空购物车?

从 Paypal 重定向回来后,Wordpress + WooCommerce 中的会话不一致

如何在 WooCommerce 编辑订单中计算自定义订单总额?

在用户离开我的域进行购买并回来后使用谷歌分析跟踪他们