BigThink

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 visibilità o per vederle tutte in un solo colpo d’occhio, volessimo dividerle in due parti, magari affiancate.

I passi da eseguire sono pochi e veramente semplici:

1. Apriamo il file functions.php del nostro template. Nel caso non esistesse, creiamolo noi.

2. All’interno dei tag <?php  ?> inseriamo le seguenti funzioni:

function partition( $list, $p ) {
    $listlen = count( $list );
    $partlen = floor( $listlen / $p );
    $partrem = $listlen % $p;
    $partition = array();
    $mark = 0;
    for ($px = 0; $px < $p; $px++) {
        $incr = ($px < $partrem) ? $partlen + 1 : $partlen;
        $partition[$px] = array_slice( $list, $mark, $incr );
        $mark += $incr;
    }
    return $partition;
}

function print_categories($args = '', $categories){
    $defaults = array(
        'show_option_all' => '', 'orderby' => 'name',
        'order' => 'ASC', 'show_last_update' => 0,
        'style' => 'list', 'show_count' => 0,
        'hide_empty' => 1, 'use_desc_for_title' => 1,
        'child_of' => 0, 'feed' => '', 'feed_type' => '',
        'feed_image' => '', 'exclude' => '',
        'hierarchical' => true, 'title_li' => __('Categories'),
        'echo' => 1, 'depth' => 0
    );

    $r = wp_parse_args( $args, $defaults );

    if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) {
        $r['pad_counts'] = true;
    }

    if ( isset( $r['show_date'] ) ) {
        $r['include_last_update_time'] = $r['show_date'];
    }

    extract( $r );

    $output = '';
    if ( $title_li && 'list' == $style )
            $output = '<li class="categories">' . $r['title_li'] . '<ul>';

    if ( empty($categories) ) {
        if ( 'list' == $style )
            $output .= '<li>' . __("No categories") . '</li>';
        else
            $output .= __("No categories");
    } else {
        global $wp_query;

        if( !empty($show_option_all) )
            if ('list' == $style )
                $output .= '<li><a href="' .  get_bloginfo('url')  . '">' . $show_option_all . '</a></li>';
            else
                $output .= '<a href="' .  get_bloginfo('url')  . '">' . $show_option_all . '</a>';

        if ( is_category() )
            $r['current_category'] = $wp_query->get_queried_object_id();

        if ( $hierarchical )
            $depth = $r['depth'];
        else
            $depth = -1; // Flat.

        $output .= walk_category_tree($categories, $depth, $r);
    }

    if ( $title_li && 'list' == $style )
        $output .= '</ul></li>';

    $output = apply_filters('wp_list_categories', $output);

    if ( $echo )
        echo $output;
    else
        return $output;
}

La prima funzione si occuperà di dividere l’array delle categorie in due parti con lo stesso numero di elementi, mentre la seconda funzione è una piccola variante di wp_list_categories, originaria di WordPress, che nel nostro caso prende l’array delle categorie e lo stampa nel formato desiderato.

3. Ora non resta che utilizzare queste nuove funzioni: apriamo il file sidebar.php dove si presume sia l’elenco delle categorie e, In un punto qualsiasi prima di esse, scriveremo:

<?php
    $cats = get_categories('sort_column=name');
    list($cat1, $cat2) = partition($cats, 2);
?>

La prima riga carica nella variabile $cats tutto l’array con le categorie. I parametri che è possibile passare, li trovate a questa pagina. Nella seconda riga, invece, dividiamo l’array in 2 parti uguali e le salviamo rispettivamente in $cat1 e $cat2.

4. A questo punto possiamo far comparire il primo elenco nel posto desiderato:

<ul id="categories-left">
<?php print_categories('title_li=', $cat1); ?>
</ul>

e poi anche la seconda parte:

<ul id="categories-right">
<?php print_categories('title_li=', $cat2); ?>
</ul>

I parametri di print_categories sono in sostanza gli stessi parametri della funzione wp_list_categories da cui deriva e potete consultarli qui.

L’unico problema che potreste riscontrare dipende dal fatto che utilizziate o meno le sottocategorie. In caso affermativo, troncare a metà l’elenco delle categorie, potrebbe sfasare un po’ le parentele dell’albero. In sostanza: se avete un elenco di categorie su più livelli, evitate di utilizzare questo tip.

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

Risorse per creare un'applicazione Facebook in PHP

Risorse per creare un’applicazione Facebook in PHP

Facebook è ormai un fenomeno di massa, perchè non approfittarne? Da bravi programmatori PHP quali siamo, ci sarà pur venuta la curiosità di creare una nostra applicazione Facebook, giusto per sperimentare qualcosa di nuovo o magari per promuovere il nostro sito o blog. E' giunto allora il momento di buttarci ed iniziare a studiare ...
WordPress: capitalizzare i titoli nel feed RSS in automatico

WordPress: capitalizzare i titoli nel feed RSS in automatico

Un paio di giorni fa commentavo un articolo di Francesco Gavello, chiedendogli perchè scrivesse i titoli dei suoi articoli mettendo in maiuscolo l'iniziale di ogni parola. Francesco mi ha allora risposto: Semplice impatto e migliore estetica quando finiscono nei feed reader. Una volta mischiati ad altri flussi RSS, risaltano maggiormente e hanno un “ché” di ...
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à ...
Facebook Paginator: creare una paginazione in stile Facebook

Facebook Paginator: creare una paginazione in stile Facebook

Ti è capitato di sviluppare Applicazioni Facebook dove devi mostrare lunghe serie di dati? Magari hai la tabella con tutti gli utenti iscritti, ma non puoi mostrare 10.000 record tutti sulla stessa pagina! Ecco che allora tornerebbe utile un sistema di paginazione che divida i vari record su più pagine, facilmente navigabili. Perchè allora non ...
Accelerare il caricamento del tuo sito con una riga di codice

Accelerare il caricamento del tuo sito con una riga di codice

Fate di tutto per ottimizzare i vostri siti (o blog) per renderli più leggeri possibile, ma, nonostante gli sforzi, il caricamento è ancora lento? Cercate sempre di evitare grafiche pesanti e immagini troppo grandi, ma il vostro server è una lumaca? Se avete un sito in php che gira su Apache, eccovi due modi ...

5 Commenti

  1. Ciao,
    sto usando il tema Atahualpa, ma non tovo il file siderbar.pho! Come mai?!
    Grazie

    2 maggio 2010, 13:17
  2. a me servirebbe una cosa simile, magari potete aiutarmi..
    Avrei birogno di mostrare SOLO le sottocategorie di PRIMO livello e DIVISE in DUE o PIU’ COLONNE..
    Qualcuno conosce un plug-in o uno script che mi permetta di fare questo?
    Grazie!!

    24 settembre 2009, 19:37
  3. grazie… io nel mio sito uso le sottocategorie, però può servire sicuramente per una template futura

    5 luglio 2009, 18:21
  4. Ghido

    [Comment ID #759 Will Be Quoted Here]
    Giusto una piccola idea per avere un tema un po’ diverso dagli altri ;)

    29 settembre 2008, 17:19
  5. può sempre venir utile;)

    29 settembre 2008, 13:39

1 Citazioni