Winter Solstice sale! 30% Off code: SOLSTICE24 Shop Now

ends midnight 12/21 PST

Auto Complete Ticket Order

Last Updated: December 30, 2020

Below code can be added to functions.php  or inside a plugin code.

add_filter( 'woocommerce_payment_complete_order_status', 'auto_complete_virtual_orders', 10, 3 );

function auto_complete_virtual_orders( $payment_complete_status, $order_id, $order ) {
	$current_status = $order->get_status();
	

	// only change status if it is coming from these
	$allowed_current_statuses = array( 'on-hold', 'pending', 'failed' );

	if ( 'processing' === $payment_complete_status && in_array( $current_status, $allowed_current_statuses ) ) {

		$order_items = $order->get_items();

		// Create an array of products in the order
		$order_products = array_filter( array_map( function( $item ) {		
			// Get associated product for each line item
			return $item->get_product();
		}, $order_items ), function( $product ) {
			// Remove non-products
			return !! $product;
		} );

		if( count( $order_products > 0 ) ) {
			// check if product is a virtual product
			$is_virtual_order = array_reduce( $order_products, function( $virtual_order_so_far, $product ) {
				return $virtual_order_so_far && $product->is_virtual();
			}, true );

			if ( $is_virtual_order ) {
				$payment_complete_status = 'completed';
			}
		}

	}

	return $payment_complete_status;
}

Did this article help you?

Ready to setup your calendar?