Отображение других подкатегорий родителя в подкатегории родителя - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу простой обзор категорий и их подкатегорий.При нажатии на родительскую категорию отображаются только подкатегории этой категории.Но я также хочу, чтобы подкатегории отображались в другой подкатегории одного и того же родителя.Я понимаю, 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>

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

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

'exclude' => $catID

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

0 голосов
/ 21 ноября 2018

Я изменил код, основываясь на получении $ parentid2 = get_queried_object ();

Примечание: этот код помещен в /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>
0 голосов
/ 21 ноября 2018

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

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

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

С помощью функции the_widget() вы можете:
- аргумент второго параметра вносить изменения в запрос
- третий параметраргумент внести изменения в вывод html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...