Отобразить все подкатегории из определенной категории?

30 мая 2013 г., 12:47:47
Просмотры: 75.6K
Голосов: 9

Мне нужно показать все подкатегории, используя

$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>';
}   

?>

Это работает, но показывает только родительскую категорию и только одну подкатегорию...

Как это исправить?

0
Все ответы на вопрос 2
13
22

Попробуйте что-то вроде этого:

по 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>';
}

Источник/вдохновение

Редактирование:

Дополнил код, протестировал, см. комментарии

30 мая 2013 г. 13:43:29
Комментарии

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

[http://wordpress.stackexchange.com/questions/73795/how-to-split-the-categories-of-subcategories-with-thumbnails]

но он показывает все категории, а мне нужна только одна выбранная категория с её подкатегориями

Yhis Yhis
30 мая 2013 г. 13:51:48

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

Yhis Yhis
30 мая 2013 г. 14:20:06

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

Nicolai Grossherr Nicolai Grossherr
30 мая 2013 г. 14:36:35

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

Yhis Yhis
30 мая 2013 г. 14:49:55

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

Yhis Yhis
30 мая 2013 г. 15:27:46

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

Yhis Yhis
30 мая 2013 г. 15:54:50

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

Yhis Yhis
30 мая 2013 г. 16:09:55

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

Nicolai Grossherr Nicolai Grossherr
30 мая 2013 г. 16:36:26

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

Yhis Yhis
30 мая 2013 г. 16:39:38

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

Yhis Yhis
30 мая 2013 г. 16:48:49

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

Yhis Yhis
30 мая 2013 г. 16:51:42

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

Nicolai Grossherr Nicolai Grossherr
30 мая 2013 г. 16:56:27

Спасибо за это :)

Adrian Adrian
18 дек. 2020 г. 17:18:57
Показать остальные 8 комментариев
1

Вот код, который сработал для меня в шаблоне страницы (мой родительский 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; ?> 
11 дек. 2014 г. 04:27:10
Комментарии

Более простая версия ответа @mikes без опции изображения - можно заменить строки 6-10 на: <a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a>

Jon Jon
27 мая 2015 г. 15:14:31