twitterfacebookgoogledribbblepinterestmyspacetumblrvimeoyoutubebehancegithubflickrforrstrssmail
Ultimas Entradas
LuxePad: Teclado Portátil Bluetooth Ultrafino para iPad check it out →

Dividir en dos columnas las categorias de WordPress

Hoy os enseñaré a dividir el índice de las categorías en dos columnas de igual tamaño. Puede ser de utilidad en el caso que tengamos una gran cantidad de categorías y queramos que nuestros usuarios puedan verlas todas echándoles un solo vistazo.

Los pasos a seguir son estos:

1- Abrimos el archivo functions.php de nuestro template. En el caso que no exista, lo creamos.

2- Dentro del tag <?php  ?> insertamos la siguiente función:

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 primera función se ocupará de dividir la lista de las categorías en dos partes con el mismo número de elementos, mientras que la segunda función es una pequeña variante de wp_list_categories, originaria de WordPress, que en nuestro caso permitirá poner el índice de categorías en el formato que nosotros le hemos designado.

3- Ahora nos queda utilizar estas nuevas funciones: abrimos el archivo sidebar.php donde en la mayoría de plantillas se encuentran insertadas las categorías, y en cualquier parte del archivo escribiremos:

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

En la primera frase aparece la variable & cats que cargará todo el índice de las categorías. Los parámetros que podemos utilizar los encontráis en esta página. En la segunda frase dividimos las categorías en dos partes iguales y las guardamos respectivamente como $cat1 y $cat2.

4- En este punto podemos hacer que aparezca el primer índice en un lugar deseado:

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

5- y después el segundo:

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

El parámetro print_categories es mismo que viene designado en wp_list_categories del cual deriva, podéis consultarlos aquí.

Written by wbaseweb

3 Comments

  1. Piratamovil · 3 mayo, 2010

    Lo probé en mi página y no funcionó.. me da error de sintaxis.

    Parse error: syntax error, unexpected T_FUNCTION, expecting ‘)’

    Saludos!

  2. Krauzer · 13 octubre, 2010

    Podrías explicar ese error?

Leave A Reply