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>

set29
Categoria: PHP, Personalizzare WordPress | Autore: Ghido

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.

Ti è piaciuto l'articolo? Vota Ok oppure No. Grazie Mille!

Leggi anche:

4 Commenti

  1. può sempre venir utile;)

  2. Ghido

    cirio ha scritto:

    può sempre venir utile;)

    Giusto una piccola idea per avere un tema un po’ diverso dagli altri ;)

  3. grazie… io nel mio sito uso le sottocategorie, però può servire sicuramente per una template futura

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

Lascia un commento

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

1 Trackback a questo post




Chiudi
Invia e-mail