Woocommerce简单过滤器php

Woocommerce简单过滤器php,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我的php技能很低。我需要一些帮助来完成这个功能。 它应该做什么:当订单被标记为“失败”时,它应该重定向到woocommerce购物车,并显示一条错误消息 但问题是,此代码将所有状态重定向到购物车,并显示错误消息(即使付款已批准) add_action('woocommerce_thankyou',function(){ 全球商业; $order=新WC_订单(); 如果($order->status!=“failed”){ wp_redirect($woocommerce->cart->ge

我的php技能很低。我需要一些帮助来完成这个功能。 它应该做什么:当订单被标记为“失败”时,它应该重定向到woocommerce购物车,并显示一条错误消息

但问题是,此代码将所有状态重定向到购物车,并显示错误消息(即使付款已批准)

add_action('woocommerce_thankyou',function(){
全球商业;
$order=新WC_订单();
如果($order->status!=“failed”){
wp_redirect($woocommerce->cart->get_cart_url());//或任何您想要的url
wc_添加_通知(uuu('Payment Failed','woocmerce'),'error');
出口
}

});当前,您正在检查状态是否为非
失败
,然后重定向

改变

if ( $order->status != 'failed' ) {

而且,您没有得到正确的订单。您的函数应该采用
$order\u 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\u order\u status\u failed”而不是“woocommerce\u thankyou”,因为它仅在订单状态失败时才会触发。 其次,需要在函数new WC_order()中传递订单id,以便它获得该订单的详细信息。然后,您可以使用if语句检查订单状态是否失败。您在if语句中使用了错误的运算符“!=”,因此它将进入除失败状态之外的所有状态的购物车页面。您应该使用“==”运算符,这样,如果订单状态等于failed only,则将处理该语句。您用于获取url的函数与新版本的woocommerce不兼容,但是您可以使用get_permalink(wc_get_page_id('cart'))函数获取购物车页面的url

以下是一个例子:

添加_操作('woocmerce_order_status_failed'、'mysite_failed')

函数mysite\u失败($order\u id){

}
}

我也试过,但它忽略了所有的事情不,这也不管用。我也尝试过没有运气的has\u order。检查您是否得到正确的
$order\u id
$order
。如果是,请检查
$order->get_status()
提供的内容。我不知道怎么做,就像我说的,我是一个低技能的php用户
print\r($order\u id)
打印($order->get_status())$order
对象后,单击code>。
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); 
 $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;