Search code examples
phpwordpresshttp-redirectwoocommerceorders

WooCommerce multiple redirections after a purchase


The following code below, redirects the customer to a custom page after a purchase in WooCommerce. In this custom page user can buy additional item (modifying order with adding new item):

code edited


Solution

  • You can try the following instead to avoid your redirection issue on order received:

    add_action('woocommerce_checkout_order_created', 'set_wc_session_original_order_id');
    function set_wc_session_original_order_id( $order ) {
        WC()->session->set('original_order_id', $order->get_id());
    }
    
    add_action('template_redirect', 'custom_shop_order_process_redirects');
    function custom_shop_order_process_redirects() {
        if ( is_page('upsell-1') && isset($_GET['woocommerce_checkout_place_order'])) {
            $order_id = WC()->session->get('original_order_id');
            if ( $order_id > 0 ) {
                $order = wc_get_order($order_id);
                $order->add_product(wc_get_product('875'));
                $order->calculate_totals(); // Already includes save() method
    
                WC()->session->__unset('original_order_id'); // Remove session variable
    
                wp_redirect( $order->get_checkout_order_received_url() );
                exit;
            } 
        } elseif ( is_wc_endpoint_url('order-received') && WC()->session->__isset('original_order_id') ) {
            wp_redirect( home_url('/upsell-1') );
            exit;
        }
    }
    

    It should work.