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:
$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:
$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:
<?php print_categories('title_li=', $cat1); ?>
</ul>
e poi anche la seconda parte:
<?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.




Ciao,
sto usando il tema Atahualpa, ma non tovo il file siderbar.pho! Come mai?!
Grazie
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!!
grazie… io nel mio sito uso le sottocategorie, però può servire sicuramente per una template futura
[Comment ID #759 Will Be Quoted Here]
Giusto una piccola idea per avere un tema un po’ diverso dagli altri
può sempre venir utile;)