Отключить вкладки продуктов для определенных категорий продуктов в WooCommerce

Я использую код из этого ответа:

Скрытие вкладок только для некоторых продуктов на страницах отдельных продуктов WooCommerce

Вот этот код:

add_filter( 'woocommerce_product_tabs', 'conditionaly_removing_product_tabs', 98 );
function conditionaly_removing_product_tabs( $tabs ) {

    // Get the global product object
    global $product;

    // Get the current product ID
    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    // Define HERE your targetted products IDs in this array   <===  <===  <===
    $target_products_ids = array(123,152,162);

    // If the current product have the same ID than one of the defined IDs in your array,… 
    // we remove the tab.
    if(in_array($product_id, $target_products_ids)){

        // KEEP BELOW ONLY THE TABS YOU NEED TO REMOVE   <===  <===  <===  <===
        unset( $tabs['description'] ); // (Description tab)  
        unset( $tabs['reviews'] );     // (Reviews tab)
        unset( $tabs['additional_information'] ); // (Additional information tab)

    }

    return $tabs;

}

Этот код прекрасно работает для отмены или скрытия вкладок от определенных продуктов.

Вместо этого я хотел бы убрать или скрыть вкладки из определенных категорий товаров.

Как я могу сделать это для товарных категорий?

2 ответа

Решение

Поскольку код изначально взят из одного из моих ответов, очень просто заставить его работать для категорий товаров, просто изменив 2 строки и используя условную функцию WordPress. has_term():

add_filter( 'woocommerce_product_tabs', 'conditionaly_removing_product_tabs', 99 );
function conditionaly_removing_product_tabs( $tabs ) {

    // Get the global product object
    global $product;

    // Get the current product ID
    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    // Define HERE your targeted categories (Ids, slugs or names)   <===  <===  <===
    $product_cats = array( 'clothing', 'posters' );

    // If the current product have the same ID than one of the defined IDs in your array,… 
    // we remove the tab.
    if( has_term( $product_cats, 'product_cat', $product_id ) ){

        // KEEP BELOW ONLY THE TABS YOU NEED TO REMOVE   <===  <===  <===  <===
        unset( $tabs['description'] ); // (Description tab)  
        unset( $tabs['reviews'] );     // (Reviews tab)
        unset( $tabs['additional_information'] ); // (Additional information tab)
    }
    return $tabs;
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Код протестирован и работает в WooCommerce.

WordPress условная функция has_term() принимать идентификаторы, слизни или названия ваших категорий продуктов...

Попробуйте код ниже

add_filter( 'woocommerce_product_tabs', 'conditionaly_removing_product_tabs', 99 );
function conditionaly_removing_product_tabs( $tabs ) {

    // Get the global product object
    global $product;

    // Get the current product ID
    $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

    //get all categories
    $terms = wp_get_post_terms( $product_id, 'product_cat' );
    foreach ( $terms as $term ) 
    {
            $categories[] = $term->slug;
    }
    if ( in_array( 'Your-product-categories-slug', $categories ) ) {  
        unset( $tabs['description'] ); // (Description tab)  
        unset( $tabs['reviews'] );     // (Reviews tab)
        unset( $tabs['additional_information'] ); // (Additional information tab) 
    }
    return $tabs;
}

Изменить для проверки более 1 категории

Для проверки использовано более 1 категории has_term()

$product_cats=array('Your-product-categories-slug1','Your-product-categories-slug2','Your-product-categories-slug3');
if( has_term( $product_cats, 'product_cat', $product_id ) ){
.....
}
Другие вопросы по тегам