【问题标题】:WooCommerce: updating cart from checkout page redirects to cart pageWooCommerce:从结帐页面更新购物车重定向到购物车页面
【发布时间】:2016-03-30 22:59:59
【问题描述】:

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

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

【问题讨论】:

    标签: woocommerce


    【解决方案1】:

    之所以会这样,是因为两件事。

    1. 更新购物车操作由WC_Form_Handler 处理程序类处理。位置“includes/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。更多相关信息Here

    此“_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 个参数的更改值的说明。处理购物车更新的函数会验证购物车中创建的 nonce 字段。先前的建议禁用了referrer 字段,但还将nonce 字段的名称设置为'woocommerce-cart'。因此,nonce 验证失败。 nonce 验证是通过检查 nonce 字段与在函数中硬编码为 '_wpnonce' 的名称以及 nonce 字段的操作 'woocommerce-cart' 来完成的。 更新后的Suggest/edit会创建名为'_wpnonce'的nonce字段,满足验证的同时也禁用了referrer字段的创建。

    因此:

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

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

    【讨论】:

    • 感谢您的详细解答!它可以工作,但同时不能:) 当点击“更新购物车”时,我现在停留在结帐页面上。但是我在购物车中所做的更改已经消失(显然没有处理)。知道如何解决这个困境吗?
    • 我已经更新了答案,并解释了我所做的更改以及原因。我已经在我的 woocommerce 设置中检查并确认了购物车的更新以及建议的编辑。请尝试新的编辑。
    猜你喜欢
    • 1970-01-01
    • 2016-09-29
    • 2018-06-17
    • 2020-04-23
    • 2014-08-09
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多