¿Cómo obtener la categoría a partir del ID de un producto?
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

Opción #1
Obtener todos los product_cat usando esta función:
global $product;
$terms = get_the_terms( $product->get_id(), 'product_cat' );
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' );
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;
}

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.

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.

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

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); ?>

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

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

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.

<?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;
}
?>

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;
}
