我的php技能很低。我需要一些帮助这个功能。它应该做什么:当订单被标记为"失败"时,它应该重定向到带有错误消息的woocommerce购物车。
但问题是此代码将 ALL 状态重定向到带有错误消息的购物车(即使付款获得批准)。
add_action( 'woocommerce_thankyou', function(){
global $woocommerce;
$order = new WC_Order();
if ( $order->status != 'failed' ) {
wp_redirect( $woocommerce->cart->get_cart_url() ); // or whatever url you want
wc_add_notice ( __( 'Payment Failed', 'woocommerce' ), 'error');
exit;
}
});
目前,如果状态不是failed
,则您正在等待,然后重定向。
改变
if ( $order->status != 'failed' ) {
自
if ( $order->get_status() == 'failed' ) {
请参阅 PHP 比较运算符。
此外,您没有得到正确的顺序。您的函数应采用$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);
首先,您需要使用钩子"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');
函数 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;
}}