#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, я думал, что ваш код уже работает, и вы спрашивали, куда добавить этот код.. в любом случае, я обновил свой код. Это покажет родительские и дочерние категории на боковой панели с помощью короткого кода. Обратите внимание, что он появится только в том случае, если в текущей категории есть какие-либо подкатегории.