我的PHP技能非常低。我需要一些帮助这个功能。 它应该做什么:当订单被标记为“失败”时,它应该重定向到woocommerce购物车并显示错误消息。
但问题是此代码会将所有状态重定向到购物车并显示错误消息(即使付款已获批准)。
function distancecalcone(origin,destination) {
var directions = Maps.newDirectionFinder()
//Set the Method of Transporation. The available "modes" are WALKING, DRIVING, BICYCLING, TRANSIT.
.setMode(Maps.DirectionFinder.Mode.DRIVING)
//Set the Orgin
.setOrigin(origin)
//Set the Destination
.setDestination(destination)
//Retrieve the Distance
.getDirections();
return directions.routes[0].legs[0].distance.value/1609.34;
}
答案 0 :(得分:0)
目前,如果状态不是failed
,然后重定向,那么您正在加油。
更改
if ( $order->status != 'failed' ) {
到
if ( $order->get_status() == 'failed' ) {
此外,您没有得到正确的订单。您的函数应该$order_id
并加载正确的顺序。
add_action( 'woocommerce_thankyou', function( $order_id ){
$order = new WC_Order( $order_id );
if ( $order->get_status() == 'failed' ) {
wp_redirect( $woocommerce->cart->get_cart_url() ); // or whatever url you want
wc_add_notice ( __( 'Payment Failed', 'woocommerce' ), 'error');
exit;
}
}, 10, 1);
答案 1 :(得分:0)
首先,您需要使用挂钩“ woocommerce_order_status_failed”而不是“ woocommerce_thankyou”,因为它仅在订单状态失败时才会触发。 其次,您需要在函数new WC_Order()中传递订单ID,以便它将获取该订单的详细信息。然后可以使用if语句检查订单状态是否失败。您在if语句中使用了错误的运算符“!=”,因此它将进入购物车页面以显示除失败之一以外的所有状态。您应该使用“ ==”运算符,以便如果订单状态仅等于失败,则将处理该语句。用于获取网址的功能与新版本的woocommerce不兼容,但是可以使用get_permalink(wc_get_page_id('cart'))函数获取购物车页面的网址。
这里是一个例子:
add_action('woocommerce_order_status_failed','mysite_failed');
function mysite_failed($ order_id){
$url = get_permalink( wc_get_page_id( 'cart' ) );
$order = new WC_Order( $order_id );
if ( $order->get_status() == 'failed' ) {
wp_redirect($url);
wp_redirect( $woocommerce->cart->wc_get_cart_url() ); // or whatever url you want
wc_add_notice ( __( 'Payment Failed', 'woocommerce' ), 'error');
exit;
} }