Change Product Tab Titles and Headings

In this tutorial I will show you how to rename WooCommerce product tabs. Each tab has a title which is the link text you click in order to change the tab and also each tab has its <h2> heading which is displayed just before the tab content. By default appropriate titles and headings are the same. In this tutorial I will show you how to rename all of them.

There are also other tutorials about WooCommerce product tabs on my blog, so you can find out how to create a new tab or remove an existing tabchange the tabs order or change any tab text.

Change Product Tab Titles

Let’s begin with the simple thing, luckily you can rename any of product tab titles, just by changing the title element of the $tabs array for every tab inside woocommerce_product_tabs filter hook. And there are individual hooks for every tab as well.

We are going to take a look at every tab separately.

Change Description tab title

As I said, there are 2 ways – using either woocommerce_product_tabs or woocommerce_product_description_tab_title filter hook.

All the code from this tutorial you can insert to your functions.php file, but please keep in mind that unless you are using your custom theme, it is better to insert the code into a child theme’s file or to a custom plugin.

/**
 * Rename Description tab
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#rename-description-tab
 */
add_filter( 'woocommerce_product_tabs', 'misha_rename_description_tab' );

function misha_rename_description_tab( $tabs ) {

	$tabs[ 'description' ][ 'title' ] = 'Overview';

	return $tabs;

}

Or

/**
 * Rename Description tab
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#rename-description-tab
 */
add_filter( 'woocommerce_product_description_tab_title', 'misha_rename_description_tab' );

function misha_rename_description_tab( $title ) {

	$title = 'Overview';
	return $title;

}

I think I should also mention here one thing – in case you are going to make the new tab names translation-ready, you have to use __() and probably esc_html() functions. Or just esc_html__(). Well, WooCommerce already provides escaping using wp_kses_post() function, but trust no one and nothing, remember?

$title = esc_html__( 'Overview' );

No matter what way you choose, here is the result.

Change Description tab title WooCommerce
All is as I said – the tab is renamed, but the title remains the same, here is how to change it.

Change Additional information text

Using woocommerce_product_tabs filter hook:

/**
 * Rename Additional information tab
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#rename-additional-info-tab
 */
add_filter( 'woocommerce_product_tabs', 'misha_rename_additional_info_tab' );

function misha_rename_additional_info_tab( $tabs ) {

	$tabs[ 'additional_information' ][ 'title' ] = 'Product size';

	return $tabs;

}

Using woocommerce_product_additional_information_tab_title hook:

/**
 * Rename Additional information tab
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#rename-additional-info-tab
 */
add_filter( 'woocommerce_product_additional_information_tab_title', 'misha_rename_additional_info_tab' );

function misha_rename_additional_info_tab( $title ) {

	$title = 'Product size';
	return $title;

}

And the result:

And again, if you’re wondering, how to change “Additional information” text which is displayed before the table, just continue to read this tutorial.

By the way, if you do not need some of the default WooCommerce product tabs, you can check my another tutorial about removing them.

Rename Reviews tab

But everything described above doesn’t work out the same way for the “Reviews” tab. Why? Because this tab title displays the number of customer reviews as well!

Okay, there are two different approaches for this, in the first one we can just str_replace() the text “Reviews” and do not touch the count.

/**
 * Rename Reviews tab
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#change-reviews-title
 */
add_filter( 'woocommerce_product_tabs', 'misha_rename_reviews_tab' );

function misha_rename_reviews_tab( $tabs ) {

	$tabs[ 'reviews' ][ 'title' ] = str_replace( 'Reviews', 'What customers are saying', $tabs[ 'reviews' ][ 'title' ] );

	return $tabs;

}

In the second approach we can get the reviews count from the global $product object:

/**
 * Rename Reviews tab
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#change-reviews-title
 */
add_filter( 'woocommerce_product_tabs', 'misha_rename_reviews_tab' );

function misha_rename_reviews_tab( $tabs ) {

	global $product;

	$tabs[ 'reviews' ][ 'title' ] = 'What customers are saying (' . $product->get_review_count() . ') ';

	return $tabs;

}

Translation-ready:

$tabs[ 'reviews' ][ 'title' ] = sprintf( esc_html__( 'What customers are saying (%d)' ), $product->get_review_count() );

And of course all of this greatly applies to individual product tab hook as well, for “Reviews” tab it is woocommerce_product_reviews_tab_title filter hook.

/**
 * Rename Reviews tab
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#change-reviews-title
 */
add_filter( 'woocommerce_product_reviews_tab_title', 'misha_rename_reviews_tab' );

function misha_rename_reviews_tab( $title ) {

	$title = str_replace( 'Reviews', 'What customers are saying', $title );
	return $title;

}

No matter what way you would choose, it should work great:

How to rename WooCommerce product tabs
Read below how to change “2 reviews for…” text.

Rename custom tabs

But what is there is a custom tab that was created, let’s say by a 3rd-party plugin, and you can not change its code.

Is it possible to rename it anyway?

Actually you can do it the same way we did it for default WooCommerce product tabs. You can use either woocommerce_product_tabs filter hook or woocommerce_product_{key}_tab_title. All we need to do is to find out {key} or in the other words tab ID. It can be done easily in browser code inspector.

WooCommerce find out custom tab ID

Tab ID is misha_custom_tab. We can use it in hooks now.

/**
 * Rename custom tabs
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#rename-custom-tabs
 */
add_filter( 'woocommerce_product_tabs', 'misha_rename_custom_tab', 99 );

function misha_rename_custom_tab( $tabs ) {

	$tabs[ 'misha_custom_tab' ][ 'title' ] = 'About seller';

	return $tabs;

}

If nothing happens, just increase the hook priority.

add_filter( 'woocommerce_product_tabs', 'misha_rename_custom_tab', 9999 );

Or

/**
 * Rename custom tabs
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#rename-custom-tabs
 */
add_filter( 'woocommerce_product_misha_custom_tab_tab_title', 'misha_rename_custom_tab' );

function misha_rename_custom_tab( $title ) {

	$title = 'About seller';
	return $title;

}

Result:

how to rename custom product tabs in WooCommerce

Change Product Tab Headings

Ok, we’ve figured it out how to rename tabs, but it is not a complete solution without changing the tab headings as well 🤔

Each tab has a different filter hook which allows to change its heading, let’s make a look at them separately.

Change “Description” tab heading

/**
 * Change Description tab heading text
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#change-description-heading
 */
add_filter( 'woocommerce_product_description_heading', 'misha_description_heading' );

function misha_description_heading( $heading ){

	return 'My new heading';
	
}

Easy-breezy. Just keep in mind __() and esc_html() functions if you or somebody may translate this code later.

change description tab heading in WooCommerce

Change “Additional information” tab heading

Everything is very similar to Description tab. Actually we have just the same code but with the different filter hook.

/**
 * Change Additional information tab heading text
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#change-additional-information-heading
 */
add_filter( 'woocommerce_product_additional_information_heading', 'misha_additional_info_heading' );

function misha_additional_info_heading( $heading ){

	return 'My new heading';
	
}

Change “Reviews” heading

Here is where the interesting things come in. Yes, we have a filter hook here… it is woocommerce_reviews_title but.. it only works in case you have reviews! So, if a product has no customer reviews, the hook won’t work!

Of course I will show you a solution, but let’s make a look on an example in case there are reviews:

/**
 * Change Reviews tab heading text
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#change-reviews-heading
 */
add_filter( 'woocommerce_reviews_title', 'misha_reviews_heading', 10, 3 );

function misha_reviews_heading( $heading, $count, $product ){

	return 'What customers think about this product';
	
}

As you can see, it is not necessary to get the reviews count from global $product as we did it before, everything is already provided within filter hook arguments, you can even access a WC_Product object inside it.

And now shocking news – WooCommerce doesn’t have a hook for “Reviews” tab heading when there are no reviews! 😱

But I promised you a solution, right? 🔥👇

/**
 * Change Reviews tab heading text when there are no reviews
 *
 * @author Misha Rudrastyh
 * @url https://rudrastyh.com/woocommerce/rename-product-tabs-and-heading.html#change-reviews-heading
 */
add_filter( 'gettext', 'misha_no_reviews_heading', 20, 3 );

function misha_no_reviews_heading( $translated, $text, $domain ) {

	if( function_exists( 'is_product' ) && is_product() && 'Reviews' == $translated && 'woocommerce' == $domain ) {
		$translated = 'Ooops... No reviews yet. Please leave one!';
	}

	return $translated;

}

Is it a clean solution to hook the translation? Kind of clean, if you’re absolutely sure that you have to rename this, you can use it, but please do not forget about all the conditional statements to prevent it from translating somewhere else you do not need.

In case you do not believe me, here is a screenshot 😁

Custom heading for Reviews product tab when there are no reviews
Misha Rudrastyh

Misha Rudrastyh

Hey guys and welcome to my website. For more than 10 years I've been doing my best to share with you some superb WordPress guides and tips for free.

Need some developer help? Contact me

Follow me on Twitter