Cum obții link-ul categoriei de produse WooCommerce după ID?

3 oct. 2014, 21:20:12
Vizualizări: 101K
Voturi: 7

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?

0
Toate răspunsurile la întrebare 4
4
18

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  
3 oct. 2014 21:27:34
Comentarii

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...

RachieVee RachieVee
3 oct. 2014 21:28:09

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

akmur akmur
19 nov. 2014 12:46:24

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' )

forsvunnet forsvunnet
28 ian. 2015 16:54:49

Soluția oferită de forsvunnet a funcționat perfect pentru mine

Shane Jones Shane Jones
1 sept. 2016 01:34:03
0

Mulțumesc, folosesc

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

Funcționează perfect.

16 dec. 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() funcționează corect atunci când folosești obiectul returnat de get_categories().

18 sept. 2015 07:51:19
0

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>
25 aug. 2022 23:16:14