Отображение подкатегорий Woo Commerce только на основе выбранной родительской категории на боковой панели виджета wordpress

#php #css #wordpress #wordpress-theming #custom-wordpress-pages

Вопрос:

У меня есть боковая панель WordPress, на которой я хочу отображать только дочерние элементы родительской категории. Моя структура выглядит следующим образом

Все Товары > Категория для родителей >> Категории для детей

Как заставить боковую панель отображать только Родительскую категорию и Дочерние категории.

Я прочитал решение для реализации этого кода, но я не уверен, куда его поместить в файлы.

 <?php
if (is_category()) {
    $cat = get_query_var('cat');
    $this_category = get_category($cat);
    $this_category = wp_list_categories('hide_empty=0amp;hierarchical=trueamp;orderby=idamp;show_count=0amp;title_li=amp;use_desc_for_title=1amp;child_of='.$this_category->cat_ID."amp;echo=0");
    if($this_category !='<li>No categories</li>')
    {
     echo '<h3>Products</h3>'; 
     echo '<ul>'.$this_category.'</ul>'; 
    }
}
?>
 

Это скриншоты того, как выглядит мой магазин и чего я хочу.
Текущий Вид

Желаемый Внешний Вид

Ответ №1:

Создайте короткий код в вашей теме. functions.php файл выглядит следующим образом:

 add_shortcode('child_category_list', 'get_child_category_list');

function get_child_category_list(){
    ob_start();
    
    // Only on product parent category pages
    if( is_product_category() ) {
        $parent = get_queried_object();

        $categories = get_term_children( $parent->term_id, 'product_cat' ); 
        if ( $categories amp;amp; ! is_wp_error( $categories ) ) : 

            echo '<ul>';
            echo    '<li>';
            echo        '<a href="'.get_term_link ($parent->term_id, 'product_cat').'">'.$parent->name.'</a>';
            echo        '<ul>';
            foreach($categories as $category) :
                        $term = get_term( $category, 'product_cat' );
                        echo '<li>';
                        echo '<a href="'.get_term_link($term).'" >';
                        echo $term->name;
                        echo '</a>';
                        echo '</li>';
            endforeach;
            echo        '</ul>';
            echo    '<li>';
            echo '</ul>';

        endif;
    }
    return ob_get_clean();
}
 

Затем перейдите в раздел Внешний вид > Виджеты>, вставьте короткий код или текстовый виджет в боковую панель и вставьте следующий короткий код:

 [child_category_list]
 

Протестировано на локальном хостинге и отлично работает.

Комментарии:

1. Проследил за ответом полностью и в боковой панели ничего не появилось. Я забыл упомянуть, что использую плагин WooCommerce. Нужно ли мне передавать параметр в шорткод виджета?

2. Убедитесь, что эта боковая панель загружается на страницы категорий. Вы посещали страницы родительской категории, чтобы узнать, отображается она или нет?

3. Я думаю, что моя проблема в том, что я использую категории товаров Woo Commerce и категории сообщений. Я перестраиваю карту и обновлю ее, когда буду тестировать больше.

4. Поэтому, чтобы уточнить, я хочу отсортировать по дочерним и родительским элементам, используя категории woo commerce, а не категории сообщений.

5. @curiousSloth, я думал, что ваш код уже работает, и вы спрашивали, куда добавить этот код.. в любом случае, я обновил свой код. Это покажет родительские и дочерние категории на боковой панели с помощью короткого кода. Обратите внимание, что он появится только в том случае, если в текущей категории есть какие-либо подкатегории.