Отображение других подкатегорий родительского элемента в подкатегории родительского элемента

Мне нужен простой обзор категорий и их подкатегорий. При щелчке по родительской категории отображаются только подкатегории этой категории. Но я также хочу, чтобы подкатегории отображались в другой подкатегории одного и того же родителя. Я понимаю, что queried_object_id (); изменяется при нажатии на подкатегорию. Но как мне сообщить об этом запросу?

Мой следующий код:

    <ul>
<?php
        $parentid = get_queried_object_id();
  $taxonomy     = 'product_cat';
  $orderby      = 'name';  
  $show_count   = 0;      // 1 for yes, 0 for no
  $pad_counts   = 0;      // 1 for yes, 0 for no
  $hierarchical = 1;      // 1 for yes, 0 for no  
  $title        = '';  
  $empty        = 0;

  $args = array(
         'taxonomy'     => $taxonomy,
         'orderby'      => $orderby,
         'show_count'   => $show_count,
         'pad_counts'   => $pad_counts,
         'hierarchical' => $hierarchical,
         'title_li'     => $title,
         'hide_empty'   => $empty
  );
 $all_categories = get_categories( $args );
 foreach ($all_categories as $cat) {
    if ($cat->category_parent == 0) {
        $category_id = $cat->term_id;
                                //echo $category_id;
        echo '<li><a href = "'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .' - '. $category_id .'</a></li>';
//echo $parentid;
if ($parentid == $category_id) {
                                //$cat = get_queried_object();
        $args2 = array(
                'taxonomy'     => $taxonomy,
                'child_of'     => 0,
                'parent'       => $category_id,
                'orderby'      => $orderby,
                'show_count'   => $show_count,
                'pad_counts'   => $pad_counts,
                'hierarchical' => $hierarchical,
                'title_li'     => $title,
                'hide_empty'   => $empty
        );

        $sub_cats = get_categories( $args2 );

        if ($sub_cats) {                     
                                    echo '<ul>';
            foreach($sub_cats as $sub_category) {
                                                    //echo $parentid;

               echo '<li><a href = "'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .' - '. $sub_category->term_id .'</a></li>';
                                                                //echo  $sub_category->name ;
            }
                                            echo '</ul>';
        }
}                               
    }       
}
?>
</ul>

@LoicTheAztec у вас всегда есть чудо решения, когда дело доходит до этого;)

Solomax 21.11.2018 13:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
316
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

 the_widget( 'WC_Widget_Product_Categories', array( 'hide_empty' => false, 'hierarchical' => true, 'show_children_only' => true )  );

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

With the_widget() function you can with:
- the 2nd parameter argument make changes in the Query
- the 3rd parameter argument make changes in the html output

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

Solomax 21.11.2018 21:24

в основном, когда в подкатегории получают queried_object и используют его для сравнения

Solomax 21.11.2018 21:26

@Solomax Я обновил свой ответ, добавив 'show_children_only' => true в массив аргументов ... может это то, что вы хотите. Попробуйте еще раз, пожалуйста.

LoicTheAztec 22.11.2018 01:13

По какой-то причине "show_children_only" у меня не работает. Если я вставляю виджет в область виджетов на панели управления, он работает, но если я вставляю его программно с помощью функции «the_widget», установка для show_children_only значения true (или 1) ничего не меняет. Отображаются все категории, а не только подкатегории текущей категории.

Skovsgaard 18.08.2020 13:07

Я понял, что мне нужно установить «иерархический» в 0, чтобы «show_children_only» работало.

Skovsgaard 18.08.2020 13:27

вы можете исключить текущую категорию / термин

'exclude' => $catID

в аргументах.

Ответ принят как подходящий

Я изменил код на основе получения $ parentid2 = получить_запрос_объект ();

Примечание: этот код находится в /woocommerce/archive-product.php

и я добавил оператор elseif с разными аргументами.

Может, многовато, но работает

    <ul>
    <?php
      $parentid2 = get_queried_object(); 
      $parentid = get_queried_object_id();
      $taxonomy     = 'product_cat';
      $orderby      = 'name';  
      $show_count   = 0;      // 1 for yes, 0 for no
      $pad_counts   = 0;      // 1 for yes, 0 for no
      $hierarchical = 1;      // 1 for yes, 0 for no  
      $title        = '';  
      $empty        = 0;

      $args = array(
             'taxonomy'     => $taxonomy,
             'orderby'      => $orderby,
             'show_count'   => $show_count,
             'pad_counts'   => $pad_counts,
             'hierarchical' => $hierarchical,
             'title_li'     => $title,
             'hide_empty'   => $empty
      );
     $all_categories = get_categories( $args );
     foreach ($all_categories as $cat) {
        if ($cat->category_parent == 0) {
            $category_id = $cat->term_id;
            echo '<li><a href = "'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a></li>';

    if ($parentid == $category_id) {
            $args2 = array(
                    'taxonomy'     => $taxonomy,
                    'child_of'     => 0,
                    'parent'       => $category_id,
                    'orderby'      => $orderby,
                    'show_count'   => $show_count,
                    'pad_counts'   => $pad_counts,
                    'hierarchical' => $hierarchical,
                    'title_li'     => $title,
                    'hide_empty'   => $empty
            );

            $sub_cats = get_categories( $args2 );

            if ($sub_cats) {                     
                                        echo '<ul>';
                foreach($sub_cats as $sub_category) {
                                                        //echo $parentid;

                   echo '<li><a href = "'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a></li>';
                                                                    //echo  $sub_category->name ;
                }
                                                echo '</ul>';
            }
    }

    elseif ($parentid2->parent == $category_id) {
            $args2 = array(
                    'taxonomy'     => $taxonomy,
                    'child_of'     => 0,
                    'parent'       => $parentid2->parent,
                    'orderby'      => $orderby,
                    'show_count'   => $show_count,
                    'pad_counts'   => $pad_counts,
                    'hierarchical' => $hierarchical,
                    'title_li'     => $title,
                    'hide_empty'   => $empty
            );

            $sub_cats = get_categories( $args2 );

            if ($sub_cats) {                     
                                        echo '<ul>';
                foreach($sub_cats as $sub_category) {
                                                        //echo $parentid;

                   echo '<li><a href = "'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a></li>';
                                                                    //echo  $sub_category->name ;
                }
                                                echo '</ul>';
            }
    }



        }       
    }
    ?>
    </ul>

Другие вопросы по теме