Удалить боковую панель из категорий продуктов, тип отображения которых - подкатегории в Woocommerce - PullRequest
0 голосов
/ 13 октября 2018

Я хотел бы написать функцию, которая удаляет боковую панель со любой страницы категории продукта в woocommerce, тип отображения которой - подкатегории.

Некоторая функция, которая сообщает, что если в этой категории есть подкатегории типа отображения, то исчезаетбоковая панель.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

По умолчанию woocommerce использует тип по умолчанию (отображает подкатегории, если они существуют, и продукты, если нет подкатегорий). Чтобы проверить текущее значение, используйте условную функцию:

woocommerce_products_will_display()

Таким образом, вы можете удалитьБоковая панель, подобная этой:

function remove_storefront_sidebar( $name ){
  if ( is_product_category() && !woocommerce_products_will_display() ){
    remove_action('storefront_sidebar','storefront_get_sidebar', 10 );
  }
}
add_action( 'storefront_sidebar', 'remove_storefront_sidebar');

Другой вариант - скрыть, только если тип отображения «подкатегории»:

function remove_storefront_sidebar( $name ){
  $display_type = woocommerce_get_loop_display_mode();
  if ( is_product_category() && 'subcategories' === $display_type ){
    remove_action('storefront_sidebar','storefront_get_sidebar', 10 );
  }
}
add_action( 'storefront_sidebar', 'remove_storefront_sidebar');
0 голосов
/ 13 октября 2018

Это в основном зависит от ваших настроек.Поэтому следующий код будет обрабатывать только:

  • Поведение woocommerce по умолчанию на основе woocommerce_sidebar ловушки действий.
  • Тема витрины магазина, основанная на ловушке действий storefront_sidebar.

Пользовательская условная функция:

Во-первых, ниже приведена пользовательская условная функция, которая проверяет, установлен ли термин категории продукта с 'subcategories' тип отображения:

// Custom conditional function that check for "subcategories" display type in product categories term
function is_subcategory_display_type( $term ) {
    $taxonomy = 'product_cat';

    if( ! term_exists( $term, $taxonomy ) )
        return false;

    if( ! is_numeric( $term ) )
        $term = get_term_by( 'slug', sanitize_title( $term ), $taxonomy )->term_id;

    return get_term_meta( $term, 'display_type', true ) === 'subcategories' ?  true : false;
}

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


Затем вы добавите одну из них в зависимости от вашей темы:

1) Для обычных тем с использованием стандартной woocommerce_sidebar ловушки:

// Removing default themes woocommerce sidebar conditionally
add_action( 'woocommerce_sidebar', 'remove_woocommerce_sidebar', 1, 1 );
function remove_woocommerce_sidebar( $name ){

    $queried_object_id = get_queried_object_id();

    if ( is_product_category() && is_subcategory_display_type( $queried_object_id ) ){
        remove_action('woocommerce_sidebar','woocommerce_get_sidebar', 10 );
    }
}

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


2) Для темы Storefront используется собственная storefront_sidebar ловушка:

// Removing default "Storefront" theme woocommerce sidebar conditionally
add_action( 'storefront_sidebar', 'remove_storefront_get_sidebar', 1, 1 );
function remove_storefront_get_sidebar( $name ){

    $queried_object_id = get_queried_object_id();

    if ( is_product_category() && is_subcategory_display_type( $queried_object_id ) ){
        remove_action('storefront_sidebar','storefront_get_sidebar', 10 );
    }
}

Код находится в файле function.php вашегоАктивная детская тема (или активная тема).Протестировано и работает.


3) Другие темы с конкретными настройками:

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

...