Language עב
search

Add, Remove & Edit Product Data Tabs in WooCommerce

WooCommerce includes three default tabs on every product page: “Description”, “Additional Information”, and “Reviews”. These are called Product Data Tabs, and WooCommerce provides a filter hook that lets you remove, rename, reorder, customize, or add new tabs entirely.

All the code snippets in this guide use the woocommerce_product_tabs filter. Add them to your functions.php file in your child theme, or in a custom plugin.

If it’s not clear, these are the tabs that appear below the product itself, as shown in the following image (they may look different depending on your theme):

Removing, Adding, and Editing Tabs in WooCommerce Products

“Product tabs can be removed, renamed, re-ordered and customized using the woocommerce_product_tabs filter.” – WooCommerce official documentation.

Removing Tabs

Use unset() on the tab keys to remove specific tabs. The three default tab keys are description, reviews, and additional_information:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    unset( $tabs['description'] );
    unset( $tabs['reviews'] );
    unset( $tabs['additional_information'] );

    return $tabs;
}, 98 );

Remove only the tabs you don’t need. For example, if you want to keep the description but remove reviews and additional information, only unset those two.

Renaming Tabs

Change the title property of each tab to rename it. Always check with isset() first, since a tab might not exist for every product:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    if ( isset( $tabs['description'] ) ) {
        $tabs['description']['title'] = __( 'More Information', 'woocommerce' );
    }

    if ( isset( $tabs['reviews'] ) ) {
        $tabs['reviews']['title'] = __( 'Ratings', 'woocommerce' );
    }

    if ( isset( $tabs['additional_information'] ) ) {
        $tabs['additional_information']['title'] = __( 'Product Data', 'woocommerce' );
    }

    return $tabs;
}, 98 );

Always use isset() before modifying a tab’s properties. The “Additional Information” tab only exists when the product has attributes, dimensions, or weight. Accessing it without checking first will trigger a PHP warning.

Reordering Tabs

Change the priority value to control tab order. Lower numbers appear first:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    if ( isset( $tabs['reviews'] ) ) {
        $tabs['reviews']['priority'] = 5;
    }

    if ( isset( $tabs['description'] ) ) {
        $tabs['description']['priority'] = 10;
    }

    if ( isset( $tabs['additional_information'] ) ) {
        $tabs['additional_information']['priority'] = 15;
    }

    return $tabs;
}, 98 );

The default priorities are: Description (10), Additional Information (20), Reviews (30). Adjust these numbers to place tabs in any order you want.

Customizing Tab Content

Replace a tab’s callback to change its content entirely:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    if ( isset( $tabs['description'] ) ) {
        $tabs['description']['callback'] = 'savvy_custom_description_content';
    }

    return $tabs;
}, 98 );

function savvy_custom_description_content() {
    echo '<h2>Customized Description</h2>';
    echo '<p>Here is your custom description content.</p>';
}

The callback function replaces everything inside the tab panel. You can output any HTML, pull content from custom fields, or call other template functions.

Adding a Custom Tab

Add a new entry to the $tabs array with a unique key, a title, a priority, and a callback function:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    $tabs['usage_instructions'] = array(
        'title'    => __( 'Usage Instructions', 'woocommerce' ),
        'priority' => 50,
        'callback' => 'savvy_usage_instructions_content',
    );

    return $tabs;
} );

function savvy_usage_instructions_content() {
    echo '<h2>Usage Instructions</h2>';
    echo '<p>Follow these steps to use this product...</p>';
}

In most cases, you’ll want to pull the tab content from a custom field rather than hardcoding it. You can use Advanced Custom Fields to create a field on the product page, then display its value in the callback using get_field().

Displaying Tabs for Specific Products or Product Types

Use global $product inside the filter callback to add conditional logic. For example, show a tab only for a specific product:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    global $product;

    if ( $product->get_id() === 5 ) {
        $tabs['special_tab'] = array(
            'title'    => __( 'Special Info', 'woocommerce' ),
            'priority' => 25,
            'callback' => 'savvy_special_tab_content',
        );
    }

    return $tabs;
} );

Or show a tab only for variable products:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    global $product;

    if ( $product->is_type( 'variable' ) ) {
        $tabs['sizing_guide'] = array(
            'title'    => __( 'Sizing Guide', 'woocommerce' ),
            'priority' => 25,
            'callback' => 'savvy_sizing_guide_content',
        );
    }

    return $tabs;
} );

You can use any product method for conditions: is_type(), get_category_ids(), is_virtual(), is_downloadable(), and more.

The “Additional Information” Tab

The “Additional Information” tab is a special case. WooCommerce only displays it when the product has attributes, dimensions, or weight defined (not attributes used for variations).

If you try to modify this tab on a product that doesn’t have those properties, you’ll get a PHP warning:

Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in .../templates/single-product/tabs/tabs.php on line 35

To avoid this, always check with WooCommerce’s built-in methods before modifying the tab:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    global $product;

    if ( $product->has_attributes() || $product->has_dimensions() || $product->has_weight() ) {
        $tabs['additional_information']['title'] = __( 'Specifications', 'woocommerce' );
    }

    return $tabs;
}, 98 );

The three methods you can use are has_attributes(), has_dimensions(), and has_weight().

Overriding the Tabs Template

For deeper customization beyond what the woocommerce_product_tabs filter provides, you can override WooCommerce’s tab template directly. Copy the template file from the plugin to your child theme:

From: wp-content/plugins/woocommerce/templates/single-product/tabs/tabs.php
To:   wp-content/themes/your-child-theme/woocommerce/single-product/tabs/tabs.php

This gives you full control over the tab markup, including the HTML structure, CSS classes, and how tabs are rendered. Use this approach when you need to change the tab UI itself (e.g., switching from horizontal tabs to an accordion layout).

Template overrides require maintenance. When WooCommerce updates the template, you’ll need to check if your override is still compatible. The woocommerce_product_tabs filter is the safer option for most tab customizations, since it doesn’t depend on the template structure.

FAQs

Common questions about WooCommerce product data tabs:

What filter hook is used to customize WooCommerce product tabs?
The woocommerce_product_tabs filter hook. It receives an array of all product tabs, where each tab has a title, callback, and priority. You can modify this array to add, remove, rename, or reorder tabs.
How do I remove the Reviews tab in WooCommerce?
Add unset( $tabs['reviews'] ); inside a function hooked to the woocommerce_product_tabs filter. Alternatively, you can disable reviews entirely in WooCommerce > Settings > Products > General by unchecking "Enable product reviews".
Why is the Additional Information tab not showing?
The "Additional Information" tab only appears when the product has at least one of the following: attributes (not used for variations), dimensions, or weight. If none of these are set, WooCommerce hides the tab automatically. Add product data in the "Product data" metabox to make it appear.
Can I add product tabs with a plugin instead of code?
Yes. WooCommerce offers an official "Custom Product Tabs" extension, and several free plugins like "Custom Product Tabs for WooCommerce" by YIKES let you add tabs from the WordPress admin without writing code. However, the filter approach gives you more flexibility and doesn't add a plugin dependency.
How do I pull content from ACF into a custom tab?
Create an ACF field on the product post type, then use get_field( 'your_field_name' ) inside your tab's callback function. You can conditionally show the tab only when the field has content by checking the field value inside the woocommerce_product_tabs filter before adding the tab.
What priority should I use for the woocommerce_product_tabs filter?
A priority of 98 is commonly used, which runs after WooCommerce registers the default tabs (priority 10-30). This ensures the default tabs exist in the array before you try to modify them. If you're only adding new tabs, the default priority of 10 works fine.

Summary

WooCommerce’s woocommerce_product_tabs filter gives you full control over product page tabs. You can remove tabs with unset(), rename them by changing the title property, reorder them with priority, replace their content with a custom callback, or add entirely new tabs.

Always use isset() checks before modifying existing tabs, especially the “Additional Information” tab which only exists when the product has attributes, dimensions, or weight.

For deeper structural changes, override the tab template in your child theme – but prefer the filter approach when possible, since it’s more resilient to WooCommerce updates.

Join the Discussion
0 Comments  ]

Leave a Comment

To add code, use the buttons below. For instance, click the PHP button to insert PHP code within the shortcode. If you notice any typos, please let us know!

Savvy WordPress Development official logo