Как исключить определенные архивы со страницы магазина woocommerce?

У меня на странице магазина выводятся категории товаров, но мне надо, чтобы некоторые из них там не показывались, как это лучше сделать? На данный момент использую этот колбек, но он работает только на режим отображения "показывать товары", а у меня показ категорий:

dd_action( 'pre_get_posts', 'remove_cat_from_shop_loop' );
function remove_cat_from_shop_loop( $q ) {
    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;
    if ( ! is_admin() && is_shop() ) {
        $q->set( 'tax_query', array(array(
            'taxonomy' => 'product_archive',
            'field' => 'slug',
            'terms' => array( 'barhat' ), // Change it to the slug you want to hide
            'operator' => 'NOT IN'
        )));
    }
    remove_action( 'pre_get_posts', 'remove_cat_from_shop_loop' );
}
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Категории выводятся с помощью стандартной функции get_terms(). Ее можно отфильтровать:
function woo_exclude_categories( $terms, $taxonomies, $args ) {

    // Слаги категорий, которые надо исключить
    $exclude_categories = array(
        'category-one',
        'category-two',
    );

    $new_terms = array();

    if ( ! is_admin() && // не админка
           is_shop() && // страница магазина
           in_array( 'product_cat', $taxonomies ) // это термины таксономии 'product_cat' 
    ) {

        foreach ( $terms as $key => $term ) {

            if ( ! in_array( $term->slug, $exclude_categories ) ) {
                $new_terms[] = $term;
            }

        }
        $terms = $new_terms;

    }

    return $terms;
}
add_filter( 'get_terms', 'woo_exclude_categories', 10, 3 );

Код на скорую руку, можно попробовать фильтровать по term_id, если так удобнее, где-то подрефакторить.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы