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 中的会话不一致