WooCommerce-TEMPLATE_REDIRECT如果结账且订单已付款?

时间:2019-11-11 作者:Jussi

在我的WooCommerce商店中,我想在付款完成后重定向到自定义的“感谢页面”。我正在使用以下代码:

add_action( \'template_redirect\', \'myfunction\' );
function myfunction( $order_id ) {

    $order = wc_get_order( $order_id ); // I assume this is where I go wrong. Probably this is empty?

    if ( is_checkout() && 0 == WC()->cart->get_cart_contents_count() ) {
       wp_safe_redirect( home_url() ); // redirect to home if empty cart on checkout page
       exit;
    } else if ( is_checkout() && **somehow check if $order has been paid?** ) {
        wp_safe_redirect( \'www.myurl.com\' ); // if order has been paid for go here. this never triggers.
        exit;
    }
}
我假设我的问题是$order\\u id是空的,但我的调试技能很差,所以我不知道如何实际验证才能开始。

我知道$order->get\\u status()。我想这就是所谓的方法?如果我尝试用它代替****我会得到一个php致命错误。

谢谢你的帮助。

1 个回复
最合适的回答,由SO网友:Jussi 整理而成

我想出来了。woocommerce\\u payment\\u Successful\\u结果引导我朝着正确的方向前进,尽管这不是最终的答案。函数is\\u wc\\u endpoint\\u url()在这里非常有用,它检查woocommerce下一步将重定向到哪里。

// redirect empty checkouts and completed orders.
add_action( \'template_redirect\', \'myfunction\' );
function myfunction() {

    if( is_wc_endpoint_url( \'order-received\' ) && isset( $_GET[\'key\'] ) ) {
        wp_redirect(\'www.myurl.com\'); // go to custom page if order has been received
        exit;
    }

    if ( is_checkout() && 0 == WC()->cart->get_cart_contents_count() ) {
       wp_safe_redirect( home_url() ); // if trying to access checkout with empty cart go back
       exit;
    }  
}