【问题标题】:WooCommerce: How to retain checkout info when client leaves then comes back?WooCommerce:当客户离开然后回来时如何保留结帐信息?
【发布时间】:2016-09-24 09:29:33
【问题描述】:

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

This plugin 保留“客户来回导航时的字段信息”,但是它最近有很多差评,所以我认为我不会将其用于生产。有什么替代建议吗?

【问题讨论】:

    标签: php wordpress woocommerce checkout cart


    【解决方案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 中的一个错误,并且会在时间允许的情况下尽快提交相应的问题(此客户用户输入表单值的疯狂最近出乎意料地吸了一整天)。特别感谢收货地址复选框的花絮!
      猜你喜欢
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      相关资源
      最近更新 更多