Visita <a href="http://www.liquida.it/" title="Notizie e opinioni dai blog italiani su Liquida">Liquida</a> e <a href="I widget di Liquida per il tuo blog">Widget</a>

ott25
Categoria: Personalizzare WordPress | Autore: Ghido

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!


Leggi anche:

3 Commenti

  1. ciccio

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

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

  2. ciccio

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

Lascia un commento

Inserisci le tue informazioni personali, o loggati con il tuo account Facebook.