Checkout | Schedule Orders: Attach Affiliate Metadata at Checkout for Future Scheduled Order Processing
In this example, a developer uses the autoship_create_scheduled_order_data filter to capture affiliate data at checkout to add to the created Scheduled Order's metadata.
Then they hook into the woocommerce_payment_complete action to add an order note identifying the subsequent orders created from Scheduled Order processing, were attributed to the affiliate's original checkout order
Remember: Always test new code on a staging site before adding it to your live site.
Code Example:
** * Add Order Attribution to an Autoship Order's Metadata for future use in processed orders. * Example is each WC Checkout Order has an affiliate id which should carry on to all * Scheduled Orders spawned from that Checkout Order. * * @param array $scheduled_order_data The Scheduled Order data to be sent to QPilot * @param int $order_id The WC Order ID * @return array The filtered Scheduled Order Data */ function xx_add_inherited_metadata_to_scheduled_orders( $scheduled_order_data, $order_id ){ // Retrieve the Affiliate ID from the WC Order and Attach it to the Scheduled Order data. $affliate_id = get_post_meta( $order_id, '_affiliate_id', NULL ); // If there is an associated affiliate id then get the current orders metadata // add the affiliate id to that data and re-attach to the scheduled order data array if ( isset( $affliate_id ) ){ $metadata = isset( $scheduled_order_data['metadata'] ) ? $scheduled_order_data['metadata'] : array(); $metadata['wc_affiliate_id'] = $affliate_id; $scheduled_order_data['metadata'] = $metadata; } return $scheduled_order_data; } add_filter( 'autoship_create_scheduled_order_data', 'xx_add_inherited_metadata_to_scheduled_orders', 10, 2 ); /** * Adds An Order Note based on Attribution passed through from the Original Checkout Order. * * @param int $order_id The WC Order ID */ function xx_add_note_based_on_inherited_metadata( $order_id ){ // Retrieve the WC Order $order = wc_get_order( $order_id ); if ( !$order ) return; // Retrieve the QPilot Metadata & The Partner Info if it exists $qpilot_metadata = get_post_meta( $order->get_id(), '_qpilot_scheduled_order_metadata', true ); $wc_affiliate_id = isset( $qpilot_metadata['wc_affiliate_id'] ) ? $qpilot_metadata['wc_affiliate_id'] : ''; // If there is an associated partner id & name so add a note to the order. if ( !empty( $wc_affiliate_id )) $order->add_order_note( sprintf( 'This order originated from affiliate %s checkout order.', $wc_affiliate_id ) ); } add_action( 'woocommerce_payment_complete', 'xx_add_note_based_on_inherited_metadata', 10, 1 );