¿Cómo obtener la categoría a partir del ID de un producto?

23 nov 2012, 17:30:32
Vistas: 136K
Votos: 13

Tengo el ID de un producto (1345) ¿cómo puedo obtener el nombre de la categoría de ese producto específico?

He intentado

$post_categories = wp_get_post_categories( $post->ID );
print_r( $post_categories );

pero muestra:

Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )

¿Qué significa esto?

Gracias

2
Comentarios

¿Qué representa el ID? ¿Qué es un 'producto'? ¿Es un tipo de publicación personalizada? ¿Un campo meta? ¿Qué?

s_ha_dum s_ha_dum
23 nov 2012 17:37:29

Hola, es un producto de WooCommerce y es un tipo de publicación.

Rodrigo Sanz Rodrigo Sanz
23 nov 2012 21:35:01
Todas las respuestas a la pregunta 5
0
22

Opción #1

Obtener todos los product_cat usando esta función:

global $product;

$terms = get_the_terms( $product->get_id(), 'product_cat' );

Documentación oficial


Opción #2 Si solo necesitas los IDs, puedes obtener todos los product_category_ids asociados a un producto específico usando esta función:

global $product;

$product_cats_ids = wc_get_product_term_ids( $product->get_id(), 'product_cat' );

Documentación oficial


Extra

Si deseas mostrar - por ejemplo - los nombres de las categorías, necesitas el objeto de término de categoría. Esto se puede obtener usando get_term_by().

Un ejemplo:

foreach( $product_cats_ids as $cat_id ) {
    $term = get_term_by( 'id', $cat_id, 'product_cat' );

    echo $term->name;
}
2 sept 2017 15:46:09
6
14

Dado que la pregunta está etiquetada como woocommerce, asumo que se trata de un CPT (Custom Post Type) de producto creado por el plugin de WordPress WooCommerce. Esta respuesta no aplica si ese no es el caso.

Las categorías de productos no son categorías normales, son una taxonomía personalizada creada específicamente para productos que simplemente se etiqueta como "Categorías".

Deberías revisar la documentación de WooCommerce para encontrar alguna función que haga esto por ti. Si no encuentras nada, puedes probar una solución alternativa. Para ello, primero deberías saber el nombre de la taxonomía. Puedes copiarlo desde la URL en tu navegador cuando visites la pantalla de edición de categorías en el backend. Luego puedes usar wp_get_post_terms para obtener los términos.

23 nov 2012 20:13:25
Comentarios

Hola, gracias por tu respuesta. Y sí, es un producto de WooCommerce en WordPress. Ok, voy a intentarlo, ¿cuáles son los $args para wp_get_post_terms? Veo que "taxonomy" y "args" son opcionales, así que voy a probar solo con el ID.

Rodrigo Sanz Rodrigo Sanz
23 nov 2012 21:37:17

No funcionará solo con el ID. La taxonomía por defecto es post_tag. Necesitas pasar el nombre de la taxonomía allí. Funcionará sin $args pero puedes usarlos si quieres. Están destinados a sobrescribir los valores por defecto como se explica en esta página

Mridul Aggarwal Mridul Aggarwal
24 nov 2012 15:17:07

Lo probé pero no muestra la categoría en la que está el producto. Usé esto, <?php $term_list = wp_get_post_terms(1345, 'product_tag', array("fields" => "all")); print_r($term_list); ?>

Rodrigo Sanz Rodrigo Sanz
25 nov 2012 18:03:36

devuelve esto: Array ( [0] => stdClass Object ( [term_id] => 104 [name] => new [slug] => new [term_group] => 0 [term_taxonomy_id] => 104 [taxonomy] => product_tag [description] => Hola qué tal esto es una descripción? [parent] => 0 [count] => 8 ) ) Array ( [0] => stdClass Object ( [term_id] => 104 [name] => new [slug] => new [term_group] => 0 [term_taxonomy_id] => 104 [taxonomy] => product_tag [description] => Hola qué tal esto es una descripción? [parent] => 0 [count] => 8 ) )

Rodrigo Sanz Rodrigo Sanz
25 nov 2012 18:05:37

¿Y no hay categoría en el array? ¿Hice algo mal?

Rodrigo Sanz Rodrigo Sanz
25 nov 2012 18:06:25

Usaste product_tag. ¿Es posible que el nombre de la categoría fuera product_category? El código parece correcto y por la salida que obtienes estás recibiendo un término llamado new con un id de 104. ¿new es el nombre de una de las etiquetas?

Mridul Aggarwal Mridul Aggarwal
25 nov 2012 23:26:06
Mostrar los 1 comentarios restantes
2
12

Respondí mi propia pregunta, esto funcionó para mí:

<?php 
// Obtener lista de términos de categoría para el producto
$term_list = wp_get_post_terms($id_product,'product_cat',array('fields'=>'ids'));
// Obtener el ID de la primera categoría
$cat_id = (int)$term_list[0];
// Mostrar el enlace a la categoría
echo get_term_link ($cat_id, 'product_cat');

?>

Gracias Mridul Aggarwal por tu ayuda

27 nov 2012 21:29:12
Comentarios

Al menos podrías votar a favor de la respuesta de Mridul, si no crees que sea lo suficientemente completa como para aceptarla como correcta. Claramente te puso en el camino correcto.

Johannes Pille Johannes Pille
27 nov 2012 21:34:34

puedes usar $product->get_id() para obtener el "$id_product"

Fanky Fanky
1 mar 2021 16:27:13
1
<?php
   // Obtener los términos de la categoría del producto
   $terms = get_the_terms($product->ID, 'product_cat');
       foreach ($terms as $term) {
         // Asignar el nombre de la categoría
         $product_cat = $term->name;
            // Mostrar el nombre de la categoría
            echo $product_cat;
              // Salir del bucle después de la primera iteración
              break;
          }
   ?>
19 ago 2020 11:13:19
Comentarios

Por favor, [edita] tu respuesta y agrega una explicación: ¿por qué podría eso resolver el problema?

fuxia fuxia
19 ago 2020 12:34:18
1

Obtener todas las categorías de producto (product_cat) y mostrarlas

global $product;
$product_cats_ids = wc_get_product_term_ids( $product->get_id(), 'product_cat' );
foreach( $product_cats_ids as $cat_id ) {
    $term = get_term_by( 'id', $cat_id, 'product_cat' );
    echo $term->name;
}
4 jun 2024 23:49:35
Comentarios

esto funcionó para mí

Mehdi Mehdi
6 oct 2024 01:33:44