Ottenere l'ID della Categoria all'interno del Template della Categoria

29 mag 2011, 21:41:37
Visualizzazioni: 88.6K
Voti: 27

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

0
Tutte le risposte alla domanda 9
0
43

$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().

29 mag 2011 23:06:39
1
20

in base alla mia ricerca devi usare questo:

$category = get_queried_object();
echo $category->term_id;
4 feb 2017 10:45:53
Commenti

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

kaiser kaiser
4 feb 2017 14:44:58
1

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.

1 lug 2011 15:53:16
Commenti

Questa non è una soluzione valida in quanto restituisce tutte le categorie per tutti i post presenti in quella pagina di categoria. Il risultato che hai visualizzato restituisce la categoria iniziale dell'ultimo post nell'elenco.

cj5 cj5
21 nov 2017 19:34:51
0

A meno che non abbia frainteso la domanda, penso che tu possa anche aggiungere l'ID/slug della categoria alla classe del body:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>
30 mag 2011 01:51:48
0

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.

12 lug 2011 20:26:34
3

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.

29 mag 2011 22:51:19
Commenti

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 Michael
30 mag 2011 00:00:40

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

VicePrez VicePrez
30 mag 2011 00:16:40

get_the_category() funziona all'interno di category.php

Lea Cohen Lea Cohen
5 lug 2011 11:19:24
1
// 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);
11 gen 2013 13:20:26
Commenti

Per favore spiega perché questo potrebbe risolvere il problema. Uno snippet di codice non è una risposta sufficiente.

fuxia fuxia
11 gen 2013 14:38:24
0

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 (,).

23 set 2013 13:37:15
0
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.

10 gen 2022 08:12:35