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 e SPAM: quando Akismet non basta

WordPress e SPAM: quando Akismet non basta

Inizia oggi una nuova miniserie del buon Camu, impegnato in una lotta contro lo spam. Qualche settimana fa ho subito un'ondata massiccia di spam sul mio blog, come mai m'era capitato. Intendiamoci, il mio blog si colloca nella parte bassa della coda lunga, non ho milioni di visitatori al giorno, e quindi anche gli spammer ...
Plugin WordPress per pubblicare su Twitter i nostri post

Plugin WordPress per pubblicare su Twitter i nostri post

Terza ed ultima parte della miniserie realizzata da Camu: dopo averci introdotti agli Hook di WordPress e alle API di Twitter, è giunto il momento di mescolare bene gli ingredienti. Ora che abbiamo a disposizione tutti gli strumenti, non rimane che metterli insieme per realizzare il plugin che scrive automaticamente sul canale Twitter. Vorrei precisare ...
WordPress: aggiungere un testo alla fine del feed RSS

WordPress: aggiungere un testo alla fine del feed RSS

Tempo fa ho spiegato come inserire un testo predefinito alla fine dei post, dal quale è venuto fuori anche un plugin: Add2post. Oggi vorrei fare una cosa analoga, ma con i feed RSS: vedremo quindi come inserire automaticamente un testo predefinito alla fine di ogni elemento del nostro feed, senza l'utilizzo di alcun plugin. Un ...
WordPress: Inserire l'anteprima automatica dei video di YouTube

WordPress: Inserire l’anteprima automatica dei video di YouTube

Molti blog pubblicano contenuti provenienti da YouTube, tuttavia al momento dell’inserimento sulle Pagine Fan di Facebook non hanno a disposizione un’immagine di anteprima che attiri gli utenti a cliccare. Devono quindi usare sempre la stessa di Default. Quello che vi voglio proporre oggi è un sistema che in pochi e semplici step vi consentirà ...
WordPress: escludere dalla home i post di una certa categoria

WordPress: escludere dalla home i post di una certa categoria

Qualche mese fa avevo scritto una pillola per WordPress che è stata piuttosto apprezzata: Come creare una sezione di post in Evidenza, nella quale spiegavo come creare una sezione a parte, con i post che si vogliono mettere in evidenza. Ieri, Teodoro Di Stasi mi ha domandato: Come potrei fare in modo che gli articoli ...

6 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

3 Citazioni