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

Integrare il pulsante "Condividi" con Facebook Connect

Integrare il pulsante “Condividi” con Facebook Connect

Praticamente tutti i blog hanno ormai un pulsante "Condividi su Facebook" che apre una noiosa finestra popup esterna per pubblicare l'articolo sulla bacheca del proprio profilo. E se invece integrassimo questa funzionalità con Facebook Connect? Cosa succederebbe? Semplice, invece di avere una finestra esterna, si aprirebbe un layer interno alla pagina con il famoso ...
WordPress: ottimizzare AdSense sui vecchi post del vostro blog

WordPress: ottimizzare AdSense sui vecchi post del vostro blog

Ottimizzare AdSense sul vostro blog è un'operazione che andrebbe fatta spesso: provare nuovi formati, variarne la posizione, aggiungerne di nuovi o rimuoverli... Tutto ciò vi permette di studiare la configurazione migliore, che vi rende di più. Esistono tantissimi plugin WordPress per inserire gli AdSense nelle pagine del vostro blog e non starò qui ad ...
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ì ...
Come creare una Newsletter con WordPress e FeedBurner

Come creare una Newsletter con WordPress e FeedBurner

Esistono tantissimi servizi di Newsletter e Mailing List, la maggior parte dei quali è a pagamento o ha dei limiti. Tra le possibilità gratuite, è bene evitare i plugin per WordPress che girano in locale, in quanto richiedono troppe risorse per inviare le email e non sono molto affidabili. Una buona soluzione free è quella ...
Escludere una categoria da tutte le sezioni di WordPress

Escludere una categoria da tutte le sezioni di WordPress

Tempo fa abbiamo visto come escludere i post di una certa categoria dalla Home del nostro blog WordPress. E se volessimo escludere una categoria da ogni sezione del blog? Dalla home, dal feed RSS, dalla ricerca, dagli archivi... Se siamo pigri, ci viene incontro il plugin Advanced Category Excluder, ma se invece siamo più smanettoni ...

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