¿Cómo obtener el enlace de una categoría de producto de WooCommerce por ID?

3 oct 2014, 21:20:12
Vistas: 101K
Votos: 7

Las categorías de productos de WooCommerce son una taxonomía personalizada llamada product_cat. En una función que estoy escribiendo, estoy usando get_categories con el parámetro taxonomy establecido como product_cat. Todo funciona bien y puedo obtener el ID del término, el nombre e incluso el slug. Lo que no puedo resolver es cómo obtener el enlace para mostrarlo. Aparentemente get_category_link no funciona con taxonomías personalizadas y get_term_link tampoco está funcionando, recibo un error. Esto es lo que tengo:

$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 de la categoría
    $woo_cat_name = $woo_cat->name; //nombre de la categoría

    $return .= '<a href="' . get_category_link( $woo_cat_id ) . '">' . $woo_cat_name . '</a>';
}//fin del foreach de $woo_categories  

¿Sugerencias?

0
Todas las respuestas a la pregunta 4
4
18

Otra actualización (Sept. 2015):

Finalmente puedo usar get_term_link. El problema era que la cadena necesitaba ser convertida a un entero. Utilicé un consejo de Stack Overflow para la forma más rápida de convertirla usando (int)$value en PHP.

Así que quedaría así si no quieres usar el slug en el bucle foreach:

$woo_cat_id_int = (int)$woo_cat_id; //convertir 

Ese valor convertido se usa en lugar del slug en get_term_link. Espero que le ayude a alguien. :-)


Parece que lo resolví.

Usé get_term_link. Y estaba obteniendo un error porque lo estaba usando de esta manera:

get_term_link( $woo_cat_id, 'product_cat' );

Lo cual me dio este error:

Objeto de clase WP_Error no pudo ser convertido a cadena

Así que en su lugar opté por esta ruta con el slug y funcionó:

$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 de categoría
    $woo_cat_name = $woo_cat->name; //nombre de categoría
    $woo_cat_slug = $woo_cat->slug; //slug de categoría


    $return .= '<a href="' . get_term_link( $woo_cat_slug, 'product_cat' ) . '">' . $woo_cat_name . '</a>';
}//fin del foreach $woo_categories  
3 oct 2014 21:27:34
Comentarios

Aunque todavía no entiendo por qué no toma el ID pero sí el slug. El Codex dice que get_term_link debería tomar el ID...

RachieVee RachieVee
3 oct 2014 21:28:09

No tiene ningún sentido - debería funcionar con el ID de hecho... muchas gracias

akmur akmur
19 nov 2014 12:46:24

Term_id es un string en el objeto. Para usarlo con la función get_term_link necesitas convertirlo primero a entero get_term_link( intval($woo_cat->term_id), 'product_cat' )

forsvunnet forsvunnet
28 ene 2015 16:54:49

La solución de forsvunnet funcionó perfectamente para mí

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

Gracias, yo uso

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

Funciona perfectamente.

16 dic 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>';
            }

La función get_term_link() funciona correctamente cuando se utiliza el objeto devuelto por get_categories().

18 sept 2015 07:51:19
0

Probé este código y funciona.

<?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 ago 2022 23:16:14