Woocommerce简单的过滤器php



我的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;

}}

最新更新