Ottenere l'ID della Categoria all'interno del Template della Categoria
Come posso ottenere l'ID della categoria all'interno del Template? Molto importante: Non posso farlo tramite il nome, perché abbiamo più categorie con lo stesso nome. Solo lo slug è diverso. Se potessi ottenere lo slug andrebbe bene ugualmente. Ma come ho detto: non posso usare il titolo della categoria.....

$wp_query->get_queried_object()
ti restituirà l'"oggetto attualmente interrogato". In un archivio di categoria questo è l'oggetto categoria, in una pagina di autore questo è l'autore, in un singolo post questo è il post stesso... beh, hai capito il concetto. Se vuoi solo l'ID puoi anche usare $wp_query->get_queried_object_id()
.

Presumo che tu abbia ricevuto il voto negativo perché non stai spiegando il motivo per cui questo aiuta, ma ti limiti a dichiarare che funziona. Potresti voler ispezionare il codice sorgente di quella funzione e aggiungere le tue scoperte come modifica alla tua risposta. Suggerimento: se un commento deve essere più lungo della tua risposta, allora avrebbe dovuto essere un commento :)

Non posso ancora commentare, ma la risposta di VicePrez funziona. Il seguente codice funziona perfettamente su una pagina archivio di categoria (anche se probabilmente vorrai fare qualcosa di diverso dal semplice echo):
<?php
$category = get_the_category();
echo $category[0]->cat_ID;
?>
MODIFICA: Cancella tutto, ha funzionato per me finché non ho incontrato una categoria che non aveva post, poi ha preso la sottocategoria invece della categoria principale. Non puoi fare affidamento su get_the_category in una pagina template di categoria.

La risposta di @Jan Fabry è effettivamente quella corretta, ecco perché: Poiché WordPress consente più categorie per un post, utilizzare $category = get_the_category()
e interrogare $category[0]
non funzionerà in ogni caso, poiché quello che stai facendo è chiedere la prima categoria del primo post. Immagina di avere le categorie A, B e C. Se hai un solo post che appartiene alle categorie A e B e ti trovi nella pagina della categoria B, potresti ottenere le informazioni della categoria A invece di quelle di B.
Ecco perché è meglio usare $category = $wp_query->get_queried_object()
, perché nell'esempio precedente otterrai sempre le informazioni di B quando sei nella pagina della categoria B.

Potresti usare get_the_category()
per farlo.
Esempio:
<?php
$category = get_the_category();
// usa questo per visualizzare lo slug
echo $category[0]->slug;
// usa questo per visualizzare l'ID della categoria
echo $category[0]->cat_ID;
// se hai più categorie puoi eseguire un ciclo foreach in questo modo
foreach ( $category as $cat ) :
echo '<li>' . $cat->name . '</li>';
endforeach;
?>
Potresti usare:
<?php
echo '<pre>';
print_r($category);
echo '</pre>';
?>
per visualizzare l'array di oggetti che vengono restituiti.

la domanda 'come ottengo l'ID della categoria all'interno del Template' è aperta a diverse interpretazioni. all'interno di un template di singolo post, hai ragione. funziona all'interno del loop per ottenere le categorie di un singolo post; tuttavia, get_the_category()
non funzionerà in una pagina di archivio categoria per ottenere l'ID della categoria, il risultato sarebbe arbitrario.

@Michael vero. @Jan sembra aver fornito una risposta più appropriata in relazione a quel contesto specifico.

// Ottiene la categoria corrente in base alla variabile di query
$category = get_category( get_query_var( 'cat' ) );
// Recupera l'ID della categoria
$cat_id = $category->cat_ID;
// Ottiene i genitori della categoria separati da virgole e li divide in un array
$catname = explode(",", get_category_parents($cat_id, '', ','));
print_r($catname);

La maggior parte degli esempi sopra funziona, ma se stai utilizzando più categorie NESSUNO (al momento della scrittura, versione WP 3.6) degli altri metodi funziona per ottenere tutte le categorie passate a "cat" o "category_name".
Questo è il tipo di URL di archivio con più categorie: https://yoursite.com/cateogry/blue+yellow/ (sì, questo tipo di URL funziona su ogni sito WordPress ma non è molto utilizzato)
L'unico modo che ho trovato è estrarre i dati da:
$wp_query->query['category_name']
Per qualche motivo questo restituisce un valore diverso da get_query_var( 'category_name' )
che restituisce solo la prima categoria.
Quando si utilizzano più categorie, dovrai usare una funzione come explode
per ottenere un array di slug di categoria, quindi ciclare su quello per ottenere tutti gli ID:
<?php
global $wp_query;
//recupera tutte le categorie dalla query string (se si usa `category_name`)
$category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));
$categories = array();
$category_ids = array();
//cicla su tutti gli slug
foreach($category_slugs_array as $category_slug)
{
//ottieni l'oggetto categoria usando lo slug
$category = get_category_by_slug( $category_slug );
//controlla che sia stata trovata una categoria corrispondente
if(isset($category->cat_ID))
{
$categories[] = $category;
$category_ids[] = $category->cat_ID;
}
}
var_dump($categories); //array di categorie
var_dump($category_ids); //array di ID di categoria
?>
Ovviamente è necessario fare alcune considerazioni quando si utilizzano gli operatori AND (+) o OR (,).

add_action( 'loop_start', 'demo_cat_id' );
function demo_cat_id() {
$terms = get_the_terms( get_queried_object_ID(), 'category' );
$term = array_pop( $terms );
echo $term->term_id;
}
Puoi anche usare get_the_terms all'interno del tuo template di archivio o file functions e utilizzare il secondo parametro per specificare la tua tassonomia come categoria.
