Obtenga la URL de categoría por ID de categoría en WooCommerce en la página de detalles del producto

2 minutos de lectura

avatar de usuario
justin k

Estoy buscando la URL de la categoría en la página de detalles del producto. Estoy usando el siguiente código para obtener el ID de la categoría, pero no estoy seguro de cómo obtener la URL de la categoría.

<?php
$terms = get_the_terms( $post->ID, 'product_cat' );
foreach ($terms as $term) {
    echo $product_cat_id = $term->term_id;
    break;
}

avatar de usuario
bas van stein

Si tienes la categoría de producto id puedes usar

$link = get_term_link( $product_cat_id, 'product_cat' );

Para obtener la url de la categoría del producto.

editar asegúrese de que product_cat_id sea un número entero, use la siguiente línea para guardarlo por completo:

$link = get_term_link( (int)$product_cat_id, 'product_cat' );

  • si puedo poner esa línea en foreach no muestra nada.

    – Justin K.

    10 de diciembre de 2015 a las 15:42


  • @JustinK Mi error, olvidé el segundo parámetro, get_term_link($term, $taxonomy)

    –Bas van Stein

    10 de diciembre de 2015 a las 15:59

  • está funcionando, pero si ese producto tiene dos categorías, se muestran ambas debido a foreach. puedo conseguir solo el primero?

    – Justin K.

    10 de diciembre de 2015 a las 16:10

  • seguro en lugar de foreach Solo usa $terms[0]. Cuando funciona, puede marcar o votar la respuesta para mostrar a otros usuarios que ayudó.

    –Bas van Stein

    10 de diciembre de 2015 a las 16:25


Puedes usar get_category_link(int|object $category)

https://developer.wordpress.org/reference/functions/get_category_link/

Y aquí cómo lo uso en ‘content-product_cat.php

<a href="https://stackoverflow.com/questions/34205713/<?php esc_url_e( get_category_link( $category->term_id ) ); ?>">
        <h5 class="product-name"><?php esc_attr_e( $category->name ); ?></h5>
        <span class="dima-divider line-center line-hr small-line"></span>
        <span class="count">
        <?php  if ( $category->count > 0 ) {
        echo apply_filters( 'woocommerce_subcategory_count_html', $category->count . ' ' . ( $category->count > 1 ? __( 'Products', 'woocommerce' ) : __( 'Product', 'woocommerce' ) ), $category );
        }?>
        </span>
</a>

Si un producto pertenece a una o varias categorías, puede acceder directamente a la $terms[0] ubicación y recuperar la URL

Aquí está el código:

global $post;
$link = '';
$terms = get_the_terms( $post->ID, 'product_cat' );
if(!empty($terms[0])){
    $link = get_term_link( $terms[0]->term_id, 'product_cat' );
}

Ahora solo revisa $link está vacío o no y haz lo que necesites.

El código está probado y funciona.

¡Espero que esto ayude!

¿Ha sido útil esta solución?