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

Un aiuto ad Akismet: un plugin WordPress per bloccare gli IP

Un aiuto ad Akismet: un plugin WordPress per bloccare gli IP

Continuiamo con la miniserie di Camu: dopo l'introduzione al file .htaccess, andiamo a creare il plugin che lo modificherà. Nella serie precedente abbiamo visto quale  sia il meccanismo su cui si basano i plug-in: i ganci. Associati alle azioni che avvengono in WordPress, ad essi possono essere attaccate funzioni personalizzate che fanno ciò ...
PHP trick: inviare header dopo aver scritto nella pagina

PHP trick: inviare header dopo aver scritto nella pagina

Mi è capitato spesso nella mia carriera di programmatore PHP di trovarmi di fronte a questo errore: Warning: Cannot modify header information - headers already sent by... E' un problema che incorre quando tentiamo di inviare informazioni header, dopo aver già mandato del contenuto ad una pagina: ad esempio se abbiamo scritto qualcosa e proviamo ...
Una cache per il numero di iscritti a Facebook e Twitter

Una cache per il numero di iscritti a Facebook e Twitter

Visualizzare il numero di followers su twitter e di fan su facebook è molto oneroso in termini di tempo per il nostro blog. I server sempre sovraccarichi di questi social network minano i tempi di caricamento in modo notevole. Chiunque abbia provato a recuperare in formato testuale questi valori, in particolare quelli relativi a ...
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 ...
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 ...

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