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

时间:2016-05-26 11:37:58

标签: php wordpress woocommerce checkout cart

是否有一种简单的方法或插件可以保留客户离开并返回后输入的结帐信息?

This plugin保留"为客户来回导航时提供信息"然而,它最近有很多不好的评论,所以我不认为我会将它用于制作。还有其他建议吗?

3 个答案:

答案 0 :(得分:9)

----更新----

以下代码正常运行,但仅在提交数据时才会生效!

唯一可能的方法是在结帐字段和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挂钩会触发足以捕获所有重要点的数据。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

LoicTheAztec发布的Functions.php不适用于我。

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

Save Abandoned Carts – WooCommerce Live Checkout Field Capture

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