Fixing Shipment Tracking & WooCommerce Subscriptions issues

If you use WooCommerce you probably know Subscriptions, that awesome plugin that allows anyone to sell subscriptions. Today, I had a ticket about an issue between Suscriptions and Shipment Tracking, a great extension to track your shippings.

Here is what the customer was facing:

I’ve been using Shipment Tracking with Subscriptions for a while now, and every month I run into the same problem with shipment tracking. If I add shipment info in January for the order that month, the email goes out correctly to the customer with the tracking info.

But if I don’t manually remove the tracking info and set it back to “Custom Provider” before the renewal purchase order is placed, the renewal order email that goes to the customer includes the old tracking info at the top and it’s very confusing.

After a quick talk with guys from Skyverge (thanks Matt!),  we came up to a nice solution to fix small issue between these two great plugins. The following code snippet will stop the unwanted tracking meta from transferring from the previous subscription order to the new renewal order. You will need to change the _tracking_meta_key within the code below to reflect the exact tracking meta key stored in the database for this to work properly. And boom (don’t forget: this snippet needs to be added in functions.php in the theme folder)!

/**
 * Don't transfer Shipment Tracking meta when creating a renewal order.
 *
 * @access public
 * @param array $order_meta_query MySQL query for pulling the metadata
 * @param int $original_order_id Post ID of the order being used to purchased the subscription being renewed
 * @param int $renewal_order_id Post ID of the order created for renewing the subscription
 * @param string $new_order_role The role the renewal order is taking, one of 'parent' or 'child'
 * @return void
 */
public function wcst_remove_renewal_order_meta( $order_meta_query, $original_order_id, $renewal_order_id, $new_order_role ) {
    $order_meta_query .= " AND 'meta_key' NOT IN ( '_tracking_meta_key' ) ";
    return $order_meta_query;
}
add_filter( 'woocommerce_subscriptions_renewal_order_meta_query', 'wcst_remove_renewal_order_meta' ), 10, 4 );