BigThink

WordPress: trovare la categoria corrente e quella padre

Chi è solito creare template per WordPress o chi si è trovato a dover modificare il proprio avrà notato che le funzioni che abbiamo a disposizione per lavorare con le categorie di WordPress non sono poi molte. Spesso bisogna, infatti, andarsi a spulciare documentazione e sorgenti, per trovare il modo di fare quello che vogliamo.

Per questo voglio condividere con voi alcune funzioni che ho creato ad hoc e che mi sono tornate utili in vari template. Vediamole insieme.

Nota: ovviamente il codice delle funzioni che seguono andrà inserito nel file functions.php del vostro template.

Primo problema: mi trovo dentro ad un Loop e vorrei sapere a che categoria appartiene il post corrente. Fin qui è semplice, possiamo usare la seguente funzione:

function get_cat_inside_loop(){
    $category = get_the_category();
    return $category[0]->term_id;
}

Restituirà l’ID della prima categoria a cui il post appartiene.

Bene, e se invece fossi fuori dal Loop, ad esempio nella sidebar? Potrei usare la stessa funzione di prima, ma ho riscontrato spesso alcuni problemi (ad esempio sbagliava a restituirmi l’ID). Ecco allora cosa usare:

function get_cat_outside_loop(){
    global $wp_query;
    $wp_query->is_category;
    $objCat = $wp_query->get_queried_object();
    return $objCat->term_id;
}

Chiaramente potete chiamare queste funzioni come vi pare, io ho solo dato un nome indicativo.

Secondo problema: analogamente, potrebbe servirci l’ID della categoria padre. Nel caso fossimo dentro al Loop, c’è poco da fare, dobbiamo andare a prendercelo direttamente dal database:

function get_parent_cat($cat){
    global $wpdb;
    $sql = "SELECT parent FROM $wpdb->term_taxonomy WHERE term_id = '$cat'";
    return $wpdb->get_var($sql);
}

La variabile $cat che viene passata alla funzione, è l’ID della categoria di cui vogliamo ottenere il padre. Possiamo passarle un intero, oppure recuperare la categoria corrente, con la funzione get_cat_inside_loop().

Se invece ci troviamo fuori dal Loop, la funzione che ci serve è molto simile a quella per la categoria:

function get_parent_cat_outside_loop(){
    global $wp_query;
    $wp_query->is_category;
    $objCat = $wp_query->get_queried_object();
    return $objCat->parent;
}

Funzioni come queste che vi ho presentato posso servire in vari casi, per personalizzare i comportamenti di determinati oggetti all’interno del template. Ad esempio, se vogliamo che un determinato testo compaia nella sidebar solamente quando ci troviamo all’interno di una determinata categoria (con ID = 4, nell’esempio seguente) o in una sua sottocategoria, potremo scrivere:

if(get_cat_outside_loop() == 4 || get_parent_cat_outside_loop() == 4){
   echo "Testo da mostrare";
}

Se avete domande o problemi, lasciate pure un commento e vedrò di aiutarvi come posso.
Spero di esservi stato utile anche stavolta!

Articolo scritto da Ghido

Fondatore di BigThink.it, si occupa dello sviluppo e del coordinamento dei progetti tecnologici. Specializzato nel Marketing su Facebook e nello sviluppo di Applicazioni Social, fa consulenza e formazione ad aziende ed agenzie.

Leggi anche...

WordPress: Aggiungere un feed RSS personalizzato

WordPress: Aggiungere un feed RSS personalizzato

Ci sono tantissime ragioni per cui si potrebbe voler aggiungere un feed RSS secondario: dare la possibilità ai lettori di iscriversi sia al feed completo che a quello breve; impostare un feed rss personalizzato per gli aggregatori di blog; creare una newsletter con FeedBurner; mostrare il feed in un formato particolare... Nei prossimi giorni vedremo più nel dettaglio ...
Dividere su due colonne le categorie di WordPress

Dividere su due colonne le categorie di WordPress

Con questo post inizia una nuova serie di guide per la creazione o personalizzazione dei template di WordPress, ambito in cui mi sono specializzato recentemente. Oggi vedremo come dividere l'elenco delle categorie del nostro blog, su due colonne di egual lunghezza. Può tornarci utile nel caso avessimo veramente tante categorie e, per una maggiore ...
WordPress: gestire un sottomenu a categorie con icone

WordPress: gestire un sottomenu a categorie con icone

Dare visibilità ad ognuno dei temi trattati dal nostro blog non sempre è semplice, perchè non inserire un menu di navigazione con icone? La soluzione che proporremo sarà senza plugin, una versione adattabile alle proprie esigenze senza l’utilizzo di pesanti script jQuery. Inoltre potremo decidere esattamente quali cateogorie mostrare e in che ordine, evitandoci così ...
Usare l'editor di WordPress all'interno dei nostri plugin

Usare l’editor di WordPress all’interno dei nostri plugin

Dopo lunghe ricerche e moltissimi test, ho finalmente trovato il modo di inserire l'editor di WordPress all'interno dei plugin creati da me. Immaginate di sviluppare un plugin WordPress, nelle cui opzioni avete una textarea dove l'utente deve poter scrivere del testo formattato. Come prima idea potrebbe venirvi in mente di utilizzare TinyMCE ed incorporare ...
Una barra con OKNOtizie, Facebook e Twitter per WordPress

Una barra con OKNOtizie, Facebook e Twitter per WordPress

In molti mi hanno chiesto come ho fatto a mettere sotto ogni articolo la barra di OKNotizie, con il pulsante di Facebook e quello di Twitter. E' molto utile perchè permette di avere sott'occhio i tre network principali per la diffusione dei nostri post. Ho deciso allora di scrivere questo articolo, così che tutti ...

3 Commenti

  1. ciccio

    Grazie per la risposta.
    Purtroppo non riesco a nidificarle!
    Inserisco quel valore in un widget?

    25 gennaio 2009, 16:02
  2. ciccio

    Ciao,
    come hai fatto a impostare le tue categorie come sono nel tuo blog?
    Scusa, ma non sapevo come contattarti :)

    24 gennaio 2009, 16:22
    • Ghido

      Uhm.. in che senso? Non hanno niente di particolare le mie categorie.
      Sono semplicemente annidate, che è un parametro di default della funzione wp_list_cats. Poi il resto è fatto con i css.

      25 gennaio 2009, 13:52

2 Citazioni