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

dra*_*035 8 php wordpress checkout cart woocommerce

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

这个插件保留了"来回导航时为客户提供的字段信息"但是它最近有很多不好的评论,所以我认为我不会将其用于制作.还有其他建议吗?

Loi*_*tec 9

----更新----

以下代码有效,但仅在提交数据时才有效!

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

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

我在这个线程中发现了一些真正有趣的代码,它使用会话瞬态来存储结账数据.

// 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' );
Run Code Online (Sandbox Code Playgroud)

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

作者的解释:

1.保存表单数据:

第一个函数set_persitent_checkout挂钩woocommerce_after_checkout_validation.

每当该钩子被触发时,任何当前的表单数据都会通过WC_Session_Handler类保存为WordPress瞬态(最近在2.5版本中进行了更新,效率更高).

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挂钩会触发足以捕获所有重要点的数据.