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!
PHP Snippet: Show Subscription Period @ WooCommerce Cart, Checkout, Thank You Page, View Order
/**
* @snippet Subscription Interval @ Cart & Checkout
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @testedwith WooCommerce 6
* @community https://businessbloomer.com/club/
*/
// -----------------------------------------
// 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() ) );
}