Как получить ссылку на категорию товара WooCommerce по ID?
Категории товаров 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
Есть предложения?

Ещё одно обновление (сентябрь 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

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

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

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

$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()
.

Я попробовал этот код, и он работает.
<?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>
