• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Скрыть категорию с подкатегоией

svil

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

D&B

Администратор
Команда форума
Местный
Собрать и выводить кастомное меню со ссылками только на нужные категории/подкатегории.
 

svil

Новичок
Код:
add_filter( 'get_terms', 'get_subcategory_terms3', 10, 3 );

function get_subcategory_terms3( $terms3, $taxonomies, $args ) {
//начало расчета id и ярлыков siktivkar uhta
         $exclude_terms = array(); // массив для id siktivkar
        $exclude_visio = array(); // id uhta

      $exclude_terms_sik = array(); //массив для ярлыков siktivkar
      $exclude_terms_uht = array(); //массив для ярлыков uhta

     // помещение по умолчанию id  siktivkar uhta
    array_push( $exclude_terms, 15 ); //сыктывкар
    array_push( $exclude_visio, 16 ); //id uhta

    // найти подкатегории id siktivkar
     $termchildren = get_term_children( 15, 'product_cat' );

     // найти подкатегории id uhta
     $termchildren_visio = get_term_children( 16, 'product_cat' );
// перебор подкатегорий и добавление в массив id и ярлыков uhta
    foreach( $termchildren_visio as $child ) {
        $term = get_term_by( 'id', $child, 'product_cat' );     
        array_push( $exclude_visio, $term->term_id );

        $product_uht = get_post(term_id);
        $slug = $product_uht->post_name;
        array_push( $exclude_terms_uht, $term->slug);
    }   

 // перебор подкатегорий и добавление их в массив id и ярлыков siktivkar
    foreach( $termchildren as $child ) {
        $term = get_term_by( 'id', $child, 'product_cat' );     
        array_push( $exclude_terms, $term->term_id );

        $product_sik = get_post(term_id);
        $slug = $product_sik->post_name;
        array_push( $exclude_terms_sik, $term->slug);
    }


        //добавление ярлыка siktivkar в массив ярлыков siktivkar
        array_push( $exclude_terms_sik, 'siktivkar');
        //добавление ярлыка uhta в массив ярлыков uhta
        array_push( $exclude_terms_uht, 'uhta');
     $strs = implode(",",$exclude_terms);//массив id siktivkar для просмотра
  $str_sik = implode(",",$exclude_terms_sik);//массив для ярлыков siktivkar для просмотра
   $str = implode(",",$exclude_visio); // массив id uhta для просмотра
    $str_uht = implode(",",$exclude_terms_uht);//массив для ярлыков uhta для просмотра
//конец расчета ярлыков

  $new_terms = array();

  // если находится в товарной категории и на странице сыктывкара по id
  if (is_product_category($exclude_terms)) {
  echo $str; //смотрим id uhta
  echo $str_uht; //смотрим ярлыки uhta и скрываем их по ярлыку
    foreach ( $terms3 as $key => $term ) {
        
         if ( ! in_array( $term->slug, $exclude_terms_uht ) ) {
        $new_terms3[] = $term;
      }

    }

    $terms3 = $new_terms3;
  }

  return $terms3;
}
Код рабочий, но при попытке добавить новую подкатегорию в категорию вылетает ошибка прокси сервера. Надо применить другой фильтр, но какой?
 

svil

Новичок
Заработало, взяла add_filter( 'woocommerce_product_categories_widget_args' ...+ ...$args['exclude'] =... - вообщем другой фильтр и не скрыла категории, а исключила.
 
Сверху Снизу