WooCommerce: Add Product To Order After Purchase

On Business Bloomer I sell a bundle of products, and I use no Bundles plugin for that. So the challenge was to programmatically add a list of products to the order upon purchase, once the bundle product is purchased.

This is an amazing way to save time for the customer, as they don’t need to manually add each product to the cart. In the background, after a successful purchase, some magic code (that you find below) adds products to the order, sets their price to $0.00 (so that the order total is not altered), and saves the order. Enjoy!

This screenshot may be too small, but basically the first product is the only one purchased, while the following ones are added later on by the code below!

PHP Snippet: Programmatically Add Product To a Paid WooCommerce Order

Please note – the code below searches through the order items to see if product ID = “123” is present. This is the “bundle” product.

When that is purchased, my code triggers and adds to cart product ID = “456”. You can of course add multiple products by adding as many $order->add_product lines as you wish.

/**
 * @snippet       Add Product @ WooCommerce Order
 * @how-to        businessbloomer.com/woocommerce-customization
 * @author        Rodolfo Melogli, Business Bloomer
 * @compatible    WooCommerce 7
 * @community     https://businessbloomer.com/club/
 */

add_action( 'woocommerce_payment_complete', 'bbloomer_add_products_to_order', 9999 );

function bbloomer_add_products_to_order( $order_id ) {
	$order = wc_get_order( $order_id );
	foreach ( $order->get_items() as $item_id => $item ) {
		$product_id = $item->get_product_id();
		if ( $product_id && $product_id == 123 ) {
			$order->add_product( wc_get_product( 456 ), 1, array( 'subtotal' => 0, 'total' => 0 ) );	
			$order->save();			
			//wc_downloadable_product_permissions( $order_id, true ); ADD THIS IF ADDED PRODUCT IS DOWNLOADABLE
         //wc_update_product_stock( wc_get_product( 456 ), 1, 'decrease' ); ADD THIS IF YOU WANT TO REDUCE PRODUCT STOCK BY 1
			break;
		}
	}
}

Where to add custom code?

You should place custom PHP in functions.php and custom CSS in style.css of your child theme: where to place WooCommerce customization?

This code still works, unless you report otherwise. To exclude conflicts, temporarily switch to the Storefront theme, disable all plugins except WooCommerce, and test the snippet again: WooCommerce troubleshooting 101

Related content

Rodolfo Melogli

Business Bloomer Founder

Author, WooCommerce expert and WordCamp speaker, Rodolfo has worked as an independent WooCommerce freelancer since 2011. His goal is to help entrepreneurs and developers overcome their WooCommerce nightmares. Rodolfo loves travelling, chasing tennis & soccer balls and, of course, wood fired oven pizza. Follow @rmelogli

2 thoughts on “WooCommerce: Add Product To Order After Purchase

  1. Hi there,
    Do you have any solution for the extra charge checkout/payment when adding a product to an existing (and already paid) order ?
    Thank’s

    1. Hello Sebastien, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

Questions? Feedback? Customization? Leave your comment now!
_____

If you are writing code, please wrap it like so: [php]code_here[/php]. Failure to complying with this, as well as going off topic or not using the English language will result in comment disapproval. You should expect a reply in about 2 weeks - this is a popular blog but I need to get paid work done first. Please consider joining the Business Bloomer Club to get quick WooCommerce support. Thank you!

Your email address will not be published. Required fields are marked *