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 tab, change 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 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:

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:

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.

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:

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 “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 😁


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
The only place on whole Internet where somebody explains how to remove the h2 title of additional information and reviews, not only description, and not just with css.
Thank you so much
David
In some specific circumstances, `misha_no_reviews_heading` seems to be causing problems while upgrading WC, probably because `gettext` is such a broad filter that can get called without WC being active.
You can consider swapping the order of conditions and test for $domain and $translated first so that `is_product()` is only run when WC is actually active.
Hey Peter,
Thank you for noticing it! Fixed.
I am super confused why
woocommerce_product_tabs
isn’t listed in the official Woocommerce API docs.Is this a mistake?
Or are these template hooks only meant for people looking in the source code?
Actually I’ve found it there right now.
Hi, thanks! Am I supposed to replace the “misha” with something?
Hi, it is up to you
Great article, thanks for sharing
Yes this was very helpfull indeed