¿Cómo obtener el ID de categoría del post actual?
Necesito obtener el ID de categoría del post actual fuera del loop. Primero obtengo la categoría basada en el ID del post:
global $wp_query;
$postcat = get_the_category( $wp_query->post->ID );
¿Ahora cómo obtengo el ID de la categoría? Intenté: $cat_id = $postcat->term_id;
pero no funciona.

Cuando usas la función get_the_category()
para obtener los datos de la categoría, devuelve un array de objetos, por lo que debes acceder al ID de la categoría pasando la clave del array, así $postcat[0]->term_id
global $post;
$postcat = get_the_category( $post->ID );
// prueba print_r($postcat) ;
if ( ! empty( $postcat ) ) {
echo esc_html( $postcat[0]->name );
}
¡Espero que esto ayude!

Entrada antigua lo sé, pero probablemente wp_get_post_categories
es lo que necesitas.
$cats = wp_get_post_categories( get_the_ID(), array( 'fields' => 'ids' ) );
Esto devolverá un array de IDs de categorías como este:
array (size=3)
0 => int 13
1 => int 15
2 => int 120
Así que si solo quieres un ID de categoría, puedes obtenerlo de la primera clave en el array de IDs de categorías.
$category_id = $cats[0];

Una mejora a la respuesta de Govind Kumar, ya que el que pregunta se refiere al ID de categoría, no al nombre de la categoría. El nombre de la propiedad del objeto para el ID de categoría es "cat_ID".
// obtener ID de categoría para vista general
$postcat = get_the_category( $query->post->ID );
if ( ! empty( $postcat ) ) {
echo $postcat[0]->cat_ID;
}

function catName($cat_id) {
$cat_id = (int) $cat_id;
$category = &get_category($cat_id);
return $category->name;
}
function catLink($cat_id) {
$category = get_the_category();
$category_link = get_category_link($cat_id);
echo $category_link;
}
function catCustom() {
$cats = get_the_category($post->ID);
$parent = get_category($cats[1]->category_parent);
if (is_wp_error($parent)){
$cat = get_category($cats[0]);
}
else{
$cat = $parent;
}
echo '<a href="'.get_category_link($cat).'">'.$cat->name.'</a>';
}
USA <a href="<?php catLink(1); ?>"> <?php catName(1); ?>
