WooCommerce:从结帐页面更新购物车会重定向到购物车页面
为了缩短购买过程,我的客户要求合并WooCommerce:从结帐页面更新购物车会重定向到购物车页面,woocommerce,Woocommerce,为了缩短购买过程,我的客户要求合并购物车页面和结帐页面,因此我没有使用产品页面>购物车页面>结帐页面,而是使用了产品页面>结帐页面(将购物车.php的全部内容附加到页面上) 问题:即使将购物车表单元素的action属性设置为签出页面URL,当点击“更新购物车”时,我仍然被重定向到购物车页面。知道为什么以及如何解决吗?发生这种情况是因为两件事 更新购物车操作由处理程序类处理。位置“includes/class wc form handler.php”。因为函数“update\u cart\u ac
购物车页面
和结帐页面
,因此我没有使用产品页面>购物车页面>结帐页面,而是使用了产品页面>结帐页面(将购物车.php的全部内容附加到页面上)
问题:即使将购物车表单
元素的action属性设置为签出页面
URL,当点击“更新购物车”时,我仍然被重定向到购物车页面
。知道为什么以及如何解决吗?发生这种情况是因为两件事
更新购物车操作由处理程序类处理。位置“includes/class wc form handler.php”。因为函数“update\u cart\u action()”处理购物车更新。此函数在其末尾执行wp\u safe\u redirect
,该重定向与参数$referer
一起传递
如果您签入页面的源代码,“更新购物车”按钮下方有两个隐藏字段“\u wpnance”和“\u wp\u http\u referer”。这两个字段是由于函数wp_nonce_字段('woocommerce cart')而呈现的代码>。这是在模板cart.php
after update cart按钮中。更多关于它
此“\u wp\u http\u referer”的值将发布到WC\u表单\u处理程序中
,并作为$referer
传递。您需要删除正在呈现的“\u wp\u http\u referer”字段
您可以通过将默认的wp\u nonce\u字段
函数替换为以下内容来实现这一点
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'参数仅禁用referer字段的呈现
前2个参数值更改的说明。函数handling cart update验证在cart中创建的nonce字段。“上一个建议”禁用“引用人”字段,但也将“非引用人”字段的名称设置为“woocommerce-cart”
。因此,nonce验证失败。通过将nonce字段与其名称(在函数中硬编码为“uwpnoce”
)以及nonce字段的操作(即“woocommerce-cart”
)进行核对,即可完成nonce验证。
更新后的“建议/编辑”创建了名为“\u wpnoce”
的nonce字段,该字段满足验证要求,并且还禁用了referer字段的创建
因此:
- 第一个参数设置操作名称(根据其验证nonce)
- 第二个参数设置nonce字段的名称(与
安全检查)
- 第三个参数禁止创建referer字段(这是定制的动机)
- 第四个参数导致字段“打印”而不是“返回”
希望这有帮助。理想情况下,这应该是可行的。如果确实有效,请在此更新您的经验,以供其他人参考。谢谢您的详细回答!它工作,但同时它不:)当点击“更新购物车”时,我现在停留在结帐页面。但是,我在购物车中所做的更改已不存在(显然未处理)。你知道如何解决这个难题吗?我已经更新了答案,并解释了我所做的改变和原因。我已经在我的woocommerce设置中检查并确认了购物车的更新,并建议进行编辑。请尝试新编辑。