Esgeek

Porque todos llevamos un minigeek dentro



 

Dividir en dos columnas las categorias de WordPress

Publicado por Homotecno el 21 - abril - 20093 comentarios

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


Valora este artículo:

1 Punto2 Puntos3 Puntos4 Puntos5 Puntos (1 votos, nota media: 5,00 sobre 5)
Loading ... Loading ...

3 comentarios en “Dividir en dos columnas las categorias de WordPress”

  1. Piratamovil dice:

    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 dice:

    Podrías explicar ese error?

Escribir un comentario


RSS Feed para esgeek.com          Twitter