Cum obții link-ul categoriei de produse WooCommerce după ID?
Categoriile de produse WooCommerce sunt o taxonomie personalizată numită product_cat
. Într-o funcție pe care o scriu, folosesc get_categories
cu parametrul taxonomy
setat la product_cat
. Totul funcționează bine și pot obține id-ul termenului, numele și chiar slug-ul. Ceea ce nu pot să-mi dau seama este cum să obțin link-ul pentru afișare. Se pare că get_category_link
nu funcționează cu taxonomii personalizate și get_term_link
nu funcționează nici ea, primesc o eroare. Iată ce am:
$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-ul categoriei
$woo_cat_name = $woo_cat->name; //numele categoriei
$return .= '<a href="' . get_category_link( $woo_cat_id ) . '">' . $woo_cat_name . '</a>';
}//sfârșitul foreach-ului $woo_categories
Sugestii?

Altă actualizare (sept. 2015):
Pot folosi get_term_link
până la urmă. Problema era că șirul de caractere trebuia convertit într-un întreg. Am folosit un sfat de pe Stack Overflow pentru cea mai rapidă metodă de conversie folosind (int)$value în PHP.
Deci ar arăta astfel dacă nu doriți să folosiți slug-ul în bucla foreach:
$woo_cat_id_int = (int)$woo_cat_id; //convertire
Această valoare convertită este folosită în loc de slug în get_term_link
. Sper că ajută pe cineva. :-)
Se pare că am găsit soluția.
Am folosit get_term_link. Și primeam o eroare pentru că o foloseam astfel:
get_term_link( $woo_cat_id, 'product_cat' );
Ceea ce mi-a dat această eroare:
Object of class WP_Error could not be converted to string
Așa că am încercat această variantă cu slug
și a funcționat:
$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-ul categoriei
$woo_cat_name = $woo_cat->name; //numele categoriei
$woo_cat_slug = $woo_cat->slug; //slug-ul categoriei
$return .= '<a href="' . get_term_link( $woo_cat_slug, 'product_cat' ) . '">' . $woo_cat_name . '</a>';
}//sfârșitul buclei foreach $woo_categories

Deși încă nu înțeleg de ce nu acceptă ID-ul, dar acceptă slug-ul. Codex-ul spune că get_term_link ar trebui să accepte ID-ul...

Nu are nicio logică - ar trebui să funcționeze cu id-ul într-adevăr... mulțumesc mult

Term_id este un string în obiect. Pentru a-l folosi cu funcția get_term_link trebuie să îl parsezi mai întâi ca integer 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()
funcționează corect atunci când folosești obiectul returnat de get_categories()
.

Am încercat acest cod și funcționează.
<?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 esc_attr($catTerm->name); ?>" title="<?php echo esc_attr($catTerm->name); ?>"><?php endif;?><?php echo $catTerm->name; ?></a></li>
</ul>
