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

2024-03-24

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

这个插件 https://ur.wordpress.org/plugins/woocommerce-checkout-manager/保留“客户来回导航时的字段信息”,但是它最近有很多不好的评论,所以我认为我不会将其用于生产。有什么替代建议吗?


- - 更新 - -

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

唯一可能的方法是结帐字段上的 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_Handlerclass(最近在 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_validationhook 的触发足以捕获所有重要点的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • PHP保存图像文件[重复]

    这个问题在这里已经有答案了 可能的重复 从 PHP URL 保存图像 https stackoverflow com questions 724391 saving image from php url using php 我有一个图像作为
  • 如何从控制器 Symfony2 内部访问不同的控制器

    我需要从另一个控制器内的不同控制器访问方法 我该怎么做 我可以用吗this gt get method 我可以将控制器包含在当前控制器中并创建它的对象并通过该对象访问该方法吗 这样做 可以 吗 我想调用另一个控制器的表单方法 newActi
  • 更新 Doctrine 后 Symfony 中的“ObjectManager 和 EntityManagerInterface 之间的兼容性”是什么?

    在我的 Symfony 项目中尝试更新 composer update 后出现错误 我寻找解决方案 发现有必要修改实体和构造函数中的使用和类型提示 我已经完成了 然后 我重新启动更新 但出现了不同的错误 并且更新未完全完成 结果 我的网站已
  • 使用php.ini、.htaccess和zlib.output压缩js、css和php文件

    我一直在尝试使用 gzip 压缩我的网站 尽管我的服务器不允许我使用 mod deflate 所以我在这里找到了替代解决方案 http www warpconduit net 2010 10 23 enabling gzip compres
  • PHP cURL:CURLOPT_CONNECTTIMEOUT 与 CURLOPT_TIMEOUT

    PHP 有以下两个与超时相关的选项 CURLOPT CONNECTTIMEOUT and CURLOPT TIMEOUT PHP 网站上的描述有点模糊 有什么不同 使用现实世界的示例 假设您通过 cURL 将 GET 变量发送到 URL 并
  • Laravel 5.5 多重身份验证路由问题

    尝试使用 Doctrine 而不是 Eloquent 让 Laravel 进行多重身份验证 我已经尝试了很多事情 但总是陷入困境 我目前定义了两个守卫 两个模型 两个登录控制器等 如果我启用其中之一 它们就会起作用 如果我同时尝试两者 则似
  • 使用 MySQL 检测垃圾邮件发送者

    我发现越来越多的用户在我的网站上注册 只是为了向其他用户发送重复的垃圾邮件消息 我添加了一些服务器端代码来使用以下 mysql 查询检测重复消息 SELECT count content as msgs sent FROM messages
  • Wordpress 主题管理面板显示本地服务器中的致命错误

    我有一个 WordPress 项目 这里我们使用主题jupiter 当我在本地 XAMPP 服务器上设置它时 它的主题选项不起作用 这个问题出在我的电脑上 但在另一台电脑上却正常 My XAMPP是最新版本 它显示的错误 Fatal err
  • OSX - Composer - lib-openssl 要求

    自从上次 XCode 更新到版本 7 3 1 以来 我遇到了以下问题composer and openssl在 OSX 上 更新之前有效 我尝试通过作曲家更新来更新软件包 套餐 ricardoper twitteroauth 需要lib o
  • 无法使用php连接到远程数据库

    我在 Windows 中安装了 Xampp 并且正在使用 Laravel 5 3 创建一个应用程序 我正在尝试在本地网络上的另一台服务器上执行查询 但是当我尝试这样做时 MySql 服务器使用以下命令对本地服务器上的用户进行身份验证 use
  • ZF2:如何从自定义类内部获取 ServiceManager 实例

    我无法弄清楚如何从自定义类内部获取 ServiceManager 实例 在控制器内部很简单 this gt getServiceLocator gt get My CustomLogger gt log 5 my message 现在 我创
  • PHP、MySQL、PDO 事务 - fetchAll() 可以在 commit() 之前吗?

    更多交易问题 我现在拥有的是一堆串在一起的查询 如果有任何失败 都会手动反转 代码块1 stmt1 db gt prepare Update table1 set col col 1 if stmt1 db gt execute stmt2
  • 将数组分成两半,数组总和相等或近似相等

    Problem 具有数值的数组需要分成两半 数组总和大约相等或可能相等 数组中元素的数量或顺序并不重要 probabilites array 0 4 0 15 0 1 0 1 0 2 0 2 0 3 1 45 probabilites 0
  • 具有多个 FROM 表的 TableGateway

    我想做一个简单的INNER JOINZend2 中的两个表之间 具体来说 我想在 Zend2 中这样做 SELECT FROM foo bar WHERE foo foreign id bar id 我有一个FooTable class F
  • 计算链接上的点击次数(不带 onclick)[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有诸如此类的链接 a href h
  • PHP 按值合并数组以获得 2 个不同的数组值

    我尝试将两个不同的数组合并为一个数组 有人可以帮我吗 我有这样的数组 0 Array 2 rank 579 id 1 1 Array 4 rank 251 id 2 0 Array 2 size S rank 251 1 Array 15
  • PHP is_file 和服务器根相对路径

    请问如何使用 is file 和 folder file jpg 这样的路径 谢谢你 如果路径以 开头 则表示该路径是绝对路径 当路径是相对路径时 即不以 开头 则采用相对于 php 脚本的路径 如果您希望 folder file jpg
  • Twitter APi“代码”:215,“消息”:“错误的身份验证数据

    接收错误 code 215 message 错误的身份验证数据 in my page var dump page 我读到 Friends exist 不再适用于 1 1 版本 因此我需要使用 Friends lookup 来比较一个 Twi
  • 未找到“google\appengine\CreateUploadURLRequest”类

    我正在使用谷歌云CORE PHP使用简单的 HTML 表单上传文件但我被困在CloudStorageTools班级 它会抛出连续的跟随错误 致命错误 类 找不到 google appengine api cloud storage Clou
  • 在 PHP 中获取日期和数字工作日

    我正在用 PHP 开发一个应用程序 我需要使用日期和工作日的数字表示 我尝试过以下方法 today date Y m d number date N strtotime today echo Today today weekday numb

随机推荐