Как получить ссылку на категорию товара WooCommerce по ID?

3 окт. 2014 г., 21:20:12
Просмотры: 101K
Голосов: 7

Категории товаров WooCommerce являются пользовательской таксономией с названием product_cat. В функции, которую я пишу, я использую get_categories с параметром taxonomy, установленным как product_cat. Всё работает нормально, и я могу получить ID термина, название и даже ярлык. Но я не могу понять, как получить ссылку для отображения. Очевидно, что get_category_link не работает с пользовательской таксономией, а get_term_link тоже не работает, я получаю ошибку. Вот что у меня есть:

$prod_cat_args = array(
  'taxonomy'     => 'product_cat', //woocommerce
  'orderby'      => 'name',
  'empty'        => 0
);

$woo_categories = get_categories( $prod_cat_args );

foreach ( $woo_categories as $woo_cat ) {
    $woo_cat_id = $woo_cat->term_id; //ID категории
    $woo_cat_name = $woo_cat->name; //название категории

    $return .= '<a href="' . get_category_link( $woo_cat_id ) . '">' . $woo_cat_name . '</a>';
}//конец foreach для $woo_categories  

Есть предложения?

0
Все ответы на вопрос 4
4
18

Ещё одно обновление (сентябрь 2015):

Оказывается, я всё-таки могу использовать get_term_link. Проблема была в том, что строку нужно было преобразовать в целое число. Воспользовался советом с Stack Overflow о самом быстром способе преобразования с помощью (int)$value в PHP.

Вот как это будет выглядеть, если вы не хотите использовать slug в цикле foreach:

$woo_cat_id_int = (int)$woo_cat_id; //преобразование 

Это преобразованное значение используется вместо slug в get_term_link. Надеюсь, это кому-то поможет. :-)


Кажется, я разобрался.

Я использовал get_term_link. И получал ошибку, потому что использовал его так:

get_term_link( $woo_cat_id, 'product_cat' );

Что давало мне ошибку:

Объект класса WP_Error не может быть преобразован в строку

Поэтому я пошёл другим путём, используя slug, и это сработало:

$prod_cat_args = array(
  'taxonomy'     => 'product_cat', //woocommerce
  'orderby'      => 'name',
  'empty'        => 0
);

$woo_categories = get_categories( $prod_cat_args );

foreach ( $woo_categories as $woo_cat ) {
    $woo_cat_id = $woo_cat->term_id; //ID категории
    $woo_cat_name = $woo_cat->name; //название категории
    $woo_cat_slug = $woo_cat->slug; //слаг категории

    $return .= '<a href="' . get_term_link( $woo_cat_slug, 'product_cat' ) . '">' . $woo_cat_name . '</a>';
}//конец цикла foreach для $woo_categories  
3 окт. 2014 г. 21:27:34
Комментарии

Хотя я до сих пор не понимаю, почему не работает с ID, но работает с slug. В Codex сказано, что get_term_link должен принимать ID...

RachieVee RachieVee
3 окт. 2014 г. 21:28:09

Не имеет никакого смысла - действительно должно работать с id... большое спасибо

akmur akmur
19 нояб. 2014 г. 12:46:24

Term_id в объекте является строкой. Чтобы использовать его с функцией get_term_link, нужно сначала преобразовать в целое число get_term_link( intval($woo_cat->term_id), 'product_cat' )

forsvunnet forsvunnet
28 янв. 2015 г. 16:54:49

Решение от forsvunnet отлично сработало для меня

Shane Jones Shane Jones
1 сент. 2016 г. 01:34:03
0

Спасибо, я использую

foreach ( $terms as $term ) {
$term_link = get_term_link( $term );
 echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . '</a></li>';
}

Работает отлично.

16 дек. 2014 г. 09:57:45
0
$prod_cat_args = array(
'taxonomy'     => 'product_cat', //woocommerce
            'orderby'      => 'name',
            'empty'        => 0
            );

            $terms = get_categories( $prod_cat_args );
            //$term_id=6;
            foreach ( $terms as $term ) {
            $term_link = get_term_link( $term );
            echo '<li><a class="shopping-now" href="' . esc_url( $term_link ) . '">' . $term->name . '</a></li>';
            }

get_term_link() действительно работает корректно при использовании объекта, возвращаемого функцией get_categories().

18 сент. 2015 г. 07:51:19
0

Я попробовал этот код, и он работает.

<?php $catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'exclude' => '17,77')); ?>

<?php foreach($catTerms as $catTerm) : 
       $wthumbnail_id = get_woocommerce_term_meta( $catTerm->term_id,'thumbnail_id', true );
       $wimage = wp_get_attachment_url( $wthumbnail_id );
       $wcategory =$term_link = get_term_link( $catTerm );
?>
<ul>
    <li><a class="tr" href="<?php echo esc_url( $term_link ); ?>"><?php if($wimage!=""):?><img src="<?php echo $wimage?>" alt="Изображение категории <?php echo $catTerm->name; ?>" title="Категория <?php echo $catTerm->name; ?>"><?php endif;?><?php echo $catTerm->name; ?></a></li>
</ul>
25 авг. 2022 г. 23:16:14