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设置中检查并确认了购物车的更新,并建议进行编辑。请尝试新编辑。