WooCommerce create an order programmatically and redirect to payment

前端 未结 2 1362
旧巷少年郎
旧巷少年郎 2021-02-05 16:42

For WooCommerce i\'m lookin\' for a solution to create an order programmaticly (my site just has 1 homepage with some fields) to order.

After products are added with a

相关标签:
2条回答
  • 2021-02-05 17:10

    To skip the checkout page you can filter the add to cart url.

    function so_31787244_redirect_to_checkout( $url ) {
    
        // Remove default cart message
        WC()->clear_messages();
    
        // Redirect to checkout
        $url = WC()->cart->get_checkout_url();
    
        return $url;
    }
    add_filter( 'add_to_cart_redirect', 'so_31787244_redirect_to_checkout' );
    

    You could also pursue a plugin such as One Page Checkout

    0 讨论(0)
  • 2021-02-05 17:15

    This did it for me:

    if (isset($_POST['isOrder']) && $_POST['isOrder'] == 1) {
        $address = array(
            'first_name' => $_POST['notes']['domain'],
            'last_name'  => '',
            'company'    => $_POST['customer']['company'],
            'email'      => $_POST['customer']['email'],
            'phone'      => $_POST['customer']['phone'],
            'address_1'  => $_POST['customer']['address'],
            'address_2'  => '', 
            'city'       => $_POST['customer']['city'],
            'state'      => '',
            'postcode'   => $_POST['customer']['postalcode'],
            'country'    => 'NL'
        );
    
        $order = wc_create_order();
        foreach ($_POST['product_order'] as $productId => $productOrdered) :
            $order->add_product( get_product( $productId ), 1 );
        endforeach;
    
        $order->set_address( $address, 'billing' );
        $order->set_address( $address, 'shipping' );
    
        $order->calculate_totals();
    
        update_post_meta( $order->id, '_payment_method', 'ideal' );
        update_post_meta( $order->id, '_payment_method_title', 'iDeal' );
    
        // Store Order ID in session so it can be re-used after payment failure
        WC()->session->order_awaiting_payment = $order->id;
    
        // Process Payment
        $available_gateways = WC()->payment_gateways->get_available_payment_gateways();
        $result = $available_gateways[ 'ideal' ]->process_payment( $order->id );
    
        // Redirect to success/confirmation/payment page
        if ( $result['result'] == 'success' ) {
    
            $result = apply_filters( 'woocommerce_payment_successful_result', $result, $order->id );
    
            wp_redirect( $result['redirect'] );
            exit;
        }
    }
    
    0 讨论(0)
提交回复
热议问题