WooCommerce:从结帐页面更新购物车重定向到购物车页面



为了缩短购买过程,我的客户要求合并Cart pageCheckout page,所以我有产品页面>结帐页面,而不是产品页面>购物车页面>结帐页面(附有cart.php的全部内容(。

问题:即使在将购物车form元素的操作属性设置为Checkout page URL,我在点击"更新购物车"时仍然被重定向到Cart page。知道为什么以及如何解决这个问题吗?

这是因为两件事。

  1. 更新购物车操作由WC_Form_Handler处理程序类处理。 位置">include/class-wc-form-handler.php"。其中,函数"update_cart_action(("处理购物车更新。此函数在其末尾执行wp_safe_redirect,该使用参数 $referer 传递。
  2. 如果您签入页面的源代码,则"更新购物车"按钮下方是2个隐藏字段,"_wpnonce"和"_wp_http_referer"。呈现这两个字段是因为函数wp_nonce_field( 'woocommerce-cart' ); .这是在更新购物车按钮后的模板cart.php中。更多关于它的信息 这里.

此"_wp_http_referer"的值将发布到 WC_Form_Handler 并作为$referer传递。您需要删除正在呈现的"_wp_http_referer"字段。

您可以通过将默认wp_nonce_field函数替换为以下内容来做到这一点。

wp_nonce_field( -1, 'woocommerce-cart', false, true ); //previous suggest
-----
//updated suggest below. (explanation follows)
wp_nonce_field( 'woocommerce-cart', '_wpnonce', false, true );

_wpnonce字段是安全所必需的,因此上面行中的"false"参数仅禁用引用字段的渲染。

前 2 个参数的值已更改的说明。函数处理购物车更新验证在购物车中创建的随机数字段。以前的建议禁用了引荐来源网址字段,但也将随机数字段的名称设置为'woocommerce-cart'。因此,随机数验证失败。nonce验证是通过根据其在函数中硬编码为'_wpnonce'的名称以及'woocommerce-cart'的nonce字段的操作来检查nonce字段来完成的。更新后的建议/编辑创建名为 '_wpnonce' 的随机数字段,该字段满足验证并禁用了引用字段的创建。

因此:

  • 第一个参数设置操作名称(根据该名称验证随机数(。
  • 第二个参数设置随机数字段的名称(与安全检查(
  • 第三个参数禁用引用字段的创建(这是自定义的动机(
  • 第四个参数导致字段"打印"而不是"返回">

希望这有帮助。理想情况下,这应该有效。如果确实有效,请在此处更新您的经验,以便其他人参考。

最新更新