wooCommerce ajax 提交到同一个结帐页面不起作用

wooCommerce ajax submission to same checkout page does not work

将 wooCommerce 更新到最新版本后,结帐页面 https://my_website.com/checkout/ 现在不会提交到同一页面 (即 /checkout/ page) 而不是提交给根 url (https://my_website.com/?wc-ajax=checkout).

在下订单时是否有可能的变通方法或解决方案以恢复将订单提交给的原始行为: (https://my_website.com/checkout/?wc-ajax=checkout)?

事实证明,这个问题是由最近在最新的 wooCommerce 版本中更改女佣引起的,对商店中的所有 ajax 请求使用 home_page

https://github.com/woocommerce/woocommerce/commit/fbe6db5c02077a548eb1a386076d59261017145f#diff-133db5662c51f5686d87611121a05a3b

解决方法

通过更改 includes/class-wc-ajax.php 文件中的第 35 行恢复以前的实现 (在 get_endpoint 函数内):

return esc_url_raw( apply_filters( 'woocommerce_ajax_get_endpoint', add_query_arg( 'wc-ajax', $request, remove_query_arg( array( 'remove_item', 'add-to-cart', 'added-to-cart' ), home_url( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) ), $request ) ); 

您可以使用名为 woocommerce_ajax_get_endpoint 的过滤器来实现此目的,而无需编辑源代码。

这对我有用:

function filter_woocommerce_ajax_get_endpoint( $add_query_arg, $request ) { 
    return add_query_arg( 'wc-ajax', $request, remove_query_arg( array( 'remove_item', 'add-to-cart', 'added-to-cart', 'order_again', '_wpnonce' ), home_url( 'NEW URL', 'relative' ) ) );
}; 

add_filter( 'woocommerce_ajax_get_endpoint', 'filter_woocommerce_ajax_get_endpoint', 10, 2 );