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

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 ...
Creare un database di testo in PHP

Creare un database di testo in PHP

Spesso potremmo aver necessità di utilizzare un database. Tuttavia, se si tratta di un piccolo script che non useremo spesso, invece di andare a creare tabelle su MySQL, possiamo utilizzare un semplice file di testo e andare a scrivere e leggere delle stringhe. E' chiaro che le limitazioni sono molte: deve trattarsi di una mole ...
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 ...
Ottimizzare WordPress per i motori di ricerca, senza plugin

Ottimizzare WordPress per i motori di ricerca, senza plugin

Uno dei plugin che la maggior parte dei blog usa per l'ottimizzazione delle pagine sui motori di ricerca è il famoso All in One SEO Pack. Sicuramente un ottimo plugin, nulla da dire, ma se vi trovaste nella situazione di dover alleggerire il vostro sito in quanto utilizza troppa RAM e CPU, dovreste iniziare ...
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 ...

6 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