- - 更新 - -
下面的代码可以工作,但前提是提交了数据!
唯一可能的方法是结帐字段上的 javascript/jQuery 表单事件检测和 WordPress Ajax:
- 使用ajax连接到一些会话瞬态函数(如下面的代码所示).
- Using (javascript)网络存储:localStorage, sessionStorage http://www.w3schools.com/html/html5_webstorage.asp…
我发现了一些真正有趣的代码这个线程 http://twentyzerotwo.co.uk/wordpress/how-to-make-woocommerce-checkout-persistent即使用会话瞬态来存储结账数据。
// 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
.
每当该钩子被触发时,任何当前表单数据都会通过以下方式保存为 WordPress 瞬态数据:WC_Session_Handler
class(最近在 2.5 版本中更新,效率更高)。
2. 重新加载时检查保存的数据:
接下来我们挂钩woocommerce_checkout_get_value with get_persitent_checkout
。顾名思义,这里我们检查会话瞬态并返回当前字段的任何匹配项(如果找到)。
3. Make ship_to_different_address
work:
唯一困难的是ship_to_different_address
字段,它通过不同的方法获取其值。
为了解决这个问题,添加了最终函数。它的工作原理与之前的函数完全相同,但是挂钩到woocommerce_ship_to_different_address_checked
.
你有它。如果结账时每次字段更新后都保存数据,那就太好了,但是woocommerce_after_checkout_validation
hook 的触发足以捕获所有重要点的数据。