Menu Close

WooCommerce Subscriptions: Display Start-End Dates @ Cart & Checkout

default

Interestingly enough, when you add a subscription product to the cart, there is no renewal date information unless you scroll to the very bottom and are able to read the very small text below the “recurring total” (see screenshot).

It would be way more helpful if dates (and specifically the WooCommerce subscription start date and end date) showed right under the product name inside the Cart table and in the Checkout page order review, so that the customer knows exactly what they are purchasing before having to figure that out.

So, here’s how it’s done. Enjoy!

For this yearly subscription, I was able to display the subscription interval below the product name in the Cart. Snippet also displays it in the Checkout page and Thank you / View Order customer pages.

PHP Snippet: Show Subscription Period @ WooCommerce Cart, Checkout, Thank You Page, View Order

/**
 * @snippet       Subscription Interval @ Cart & Checkout
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @testedwith    WooCommerce 6
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

// -----------------------------------------
// 1. Function to return subscription period

function bbloomer_subscription_period_order_item_meta( $product, $order_date = '' ) {
	if ( is_a( $product, 'WC_Product_Subscription' ) || is_a( $product, 'WC_Product_Subscription_Variation' ) ) {
		if ( ! $order_date ) {
			$order_date = date( 'M d' );
		} else $order_date = date( 'M d', $order_date );
		$period = WC_Subscriptions_Product::get_period( $product );
		$interval = WC_Subscriptions_Product::get_interval( $product );
		if ( date( 't', strtotime( $order_date ) ) == date( 'd', strtotime( $order_date ) ) || date( "m", strtotime( $order_date ) ) != date( "m", strtotime( $order_date ." +1 month" ) ) - 1 ) {
			$end = date( 'M d Y', strtotime( '-1 day', strtotime( 'last day of ' . $interval . ' ' . $period, strtotime( $order_date ) ) ) );
		} else {
			$end = date( 'M d Y', strtotime( $interval . ' ' . $period . ' -1 day', strtotime( $order_date ) ) );
		}
		return '<p><small>Subscription period: ' . $order_date . ' - ' . $end . '</small></p>';
	}
	return '';
}

// -----------------------------------------
// 2. Display interval @ Cart, Checkout, Order

add_action( 'woocommerce_after_cart_item_name', 'bbloomer_echo_subscription_period_cart_item_meta', 9999, 2 );

function bbloomer_echo_subscription_period_cart_item_meta( $cart_item, $cart_item_key ) {
	echo bbloomer_subscription_period_order_item_meta( $cart_item['data'] );
}

add_filter( 'woocommerce_checkout_cart_item_quantity', 'bbloomer_return_subscription_period_checkout_item_meta', 9999, 3 );

function bbloomer_return_subscription_period_checkout_item_meta( $html, $cart_item, $cart_item_key ) {
	return $html . bbloomer_subscription_period_order_item_meta( $cart_item['data'] );
}

add_action( 'woocommerce_order_item_meta_start', 'bbloomer_echo_subscription_period_order_item_meta', 9999, 4 );

function bbloomer_echo_subscription_period_order_item_meta( $item_id, $item, $order, $bool ) {
	$product = $item->get_product();
	echo bbloomer_subscription_period_order_item_meta( $product, strtotime( $order->get_date_completed() ) );
}
View Source
Posted in WooCommerce Tips