Отобразить все подкатегории из определенной категории?
Мне нужно показать все подкатегории, используя
$product_category = wp_get_post_terms( $post->ID, 'product_cat' );
сейчас я использую:
<?php
global $post;
$terms = get_the_terms( $post->ID, 'product_cat', 'hide_empty=0' );
foreach ( $terms as $term ){
$category_id = $term->term_id;
$category_name = $term->name;
$category_slug = $term->slug;
echo '<li><a href="'. get_term_link($term->slug, 'product_cat') .'">'.$category_name.'</a></li>';
}
?>
Это работает, но показывает только родительскую категорию и только одну подкатегорию...
Как это исправить?

Попробуйте что-то вроде этого:
по ID
function woocommerce_subcats_from_parentcat_by_ID($parent_cat_ID) {
$args = array(
'hierarchical' => 1,
'show_option_none' => '',
'hide_empty' => 0,
'parent' => $parent_cat_ID,
'taxonomy' => 'product_cat'
);
$subcats = get_categories($args);
echo '<ul class="wooc_sclist">';
foreach ($subcats as $sc) {
$link = get_term_link( $sc->slug, $sc->taxonomy );
echo '<li><a href="'. $link .'">'.$sc->name.'</a></li>';
}
echo '</ul>';
}
по ИМЕНИ
function woocommerce_subcats_from_parentcat_by_NAME($parent_cat_NAME) {
$IDbyNAME = get_term_by('name', $parent_cat_NAME, 'product_cat');
$product_cat_ID = $IDbyNAME->term_id;
$args = array(
'hierarchical' => 1,
'show_option_none' => '',
'hide_empty' => 0,
'parent' => $product_cat_ID,
'taxonomy' => 'product_cat'
);
$subcats = get_categories($args);
echo '<ul class="wooc_sclist">';
foreach ($subcats as $sc) {
$link = get_term_link( $sc->slug, $sc->taxonomy );
echo '<li><a href="'. $link .'">'.$sc->name.'</a></li>';
}
echo '</ul>';
}
Редактирование:
Дополнил код, протестировал, см. комментарии

Спасибо, но я не знаю, как вставить этот код в свой, в любом случае я нашел этот код:
но он показывает все категории, а мне нужна только одна выбранная категория с её подкатегориями

Спасибо, друг, я скопировал и вставил его в свой woocommerce-template.php в той части, где мне нужно его использовать, но он отображает все категории и ни одной подкатегории; пожалуйста, взгляните на ссылку, которую я привел выше, это должно выглядеть так же, но только с одной категорией и её подкатегориями

Я бегло просмотрел код из вопроса, на который вы ссылаетесь. То, что вы хотите сделать - это использовать только часть, связанную с $sub_cats = get_categories( $args2 )
и $args2 = array( ... )
, но, по сути, то, что я предложил, практически то же самое. Поэтому я не совсем понимаю, почему у вас это не работает.

Если я удалю function woocommerce_subcats_from_parentcat($parent_cat) {
то код работает, но показывает только основные категории, а не подкатегории. Если я копирую и вставляю ваш код как есть, он показывает пустоту, ничего.

Ок, теперь он показывает подкатегории, но не основную категорию, но только если я ставлю '23'. С '21' всё пусто.. Спасибо за помощь, если бы вы могли исправить этот последний маленький баг, для меня это было бы отлично.

Ок, он работает. Мне нужно просто показывать основную категорию над подкатегориями: ОСНОВНАЯ КАТЕГОРИЯ - подкатегория - подкатегория

ок, дружище, все работает отлично! огромное спасибо!! вот небольшой вопрос: можно ли всегда показывать главную категорию, когда я кликаю на подкатегорию?

конечно, это возможно, но мне кажется, это вопрос, задай его правильно; это может тебе помочь: http://wordpress.stackexchange.com/questions/56784/get-main-parent-categories-for-a-product

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

Так или иначе, проблема остается: woocommerce_subcats_from_parentcat_by_ID($parent_cat_ID) отображает только подкатегории, а woocommerce_subcats_from_parentcat_by_NAME($parent_cat_NAME) показывает только ВСЕ основные категории без подкатегорий.

Мне нужно ОСНОВНАЯ->подкатегория, и при клике на подкатегорию она должна вести себя так же, как родительская 'ОСНОВНАЯ->подкатегория'. Нужно, чтобы такое меню не менялось при клике на ОСНОВНУЮ или подкатегорию.

Во-первых, обе функции прекрасно работают у меня, возможно, вы используете одну из них неправильно. Во-вторых, желаемого поведения можно добиться, используя информацию здесь и в связанном выше вопросе. Удачи!

Вот код, который сработал для меня в шаблоне страницы (мой родительский ID был 7):
<?php $wcatTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'parent' => 7, ));
foreach($wcatTerms as $wcatTerm) :
$wthumbnail_id = get_woocommerce_term_meta( $wcatTerm->term_id, 'thumbnail_id', true );
$wimage = wp_get_attachment_url( $wthumbnail_id );
?>
<div><a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>">
<?php if($wimage!=""):?><img src="<?php echo $wimage?>" class="aligncenter" alt="<?php echo esc_attr($wcatTerm->name); ?>" title="<?php echo esc_attr($wcatTerm->name); ?>"><?php endif;?></a>
<h3 class="text-center"><a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a></h3>
</div>
<?php endforeach; ?>
