Uno de esos “pequeñitos” detalles que no me gustan de WordPress, es la manera de paginación por defecto.
Resulta muy poco efectivo y usable, además de resultar un poco “feo” eso de tener dos enlaces tipo “entradas más antiguas” y “entradas más nuevas”, si además pensamos por un momento en un blog dónde haya bastantes publicaciones de manera periódica, podemos llegar a la conclusión de lo incómodo que resulta clickar 20 veces el enlace de “páginas más antiguas para llegar al primer post del blog…
Una solución es instalar uno de los cientos de plugins que existen para paginar, pero, personalmente, todo lo que pueda solucionar desde el archivo “functions.php”, prefiero ahorrarmelo en la instalación de plugins, consumo de memoria, mantenimiento y estilizado CSS de plugins.
Pues nada, dicho y hecho, vamos a ponernos manos a la obra para crear nuestra función “paginate”, para ello, abrimos functions.php y añadimos el siguiente código:
//PAGINACION
function emm_paginate($args = null) {
$defaults = array(
'page' => null, 'pages' => null,
'range' => 3, 'gap' => 3, 'anchor' => 1,
'before' => '<div class="emm-paginate">', 'after' => '</div>',
'title' => __('Página:'),
'nextpage' => __('»'), 'previouspage' => __('«'),
'echo' => 1
);
$r = wp_parse_args($args, $defaults);
extract($r, EXTR_SKIP);
if (!$page && !$pages) {
global $wp_query;
$page = get_query_var('paged');
$page = !empty($page) ? intval($page) : 1;
$posts_per_page = intval(get_query_var('posts_per_page'));
$pages = intval(ceil($wp_query->found_posts / $posts_per_page));
}
$output = "";
if ($pages > 1) {
$output .= "$before<span class='emm-title'>$title</span>";
$ellipsis = "<span class='emm-gap'>...</span>";
if ($page > 1 && !empty($previouspage)) {
$output .= "<a href='" . get_pagenum_link($page - 1) . "' class='emm-prev'>$previouspage</a>";
}
$min_links = $range * 2 + 1;
$block_min = min($page - $range, $pages - $min_links);
$block_high = max($page + $range, $min_links);
$left_gap = (($block_min - $anchor - $gap) > 0) ? true : false;
$right_gap = (($block_high + $anchor + $gap) < $pages) ? true : false;
if ($left_gap && !$right_gap) {
$output .= sprintf('%s%s%s',
emm_paginate_loop(1, $anchor),
$ellipsis,
emm_paginate_loop($block_min, $pages, $page)
);
}
else if ($left_gap && $right_gap) {
$output .= sprintf('%s%s%s%s%s',
emm_paginate_loop(1, $anchor),
$ellipsis,
emm_paginate_loop($block_min, $block_high, $page),
$ellipsis,
emm_paginate_loop(($pages - $anchor + 1), $pages)
);
}
else if ($right_gap && !$left_gap) {
$output .= sprintf('%s%s%s',
emm_paginate_loop(1, $block_high, $page),
$ellipsis,
emm_paginate_loop(($pages - $anchor + 1), $pages)
);
}
else {
$output .= emm_paginate_loop(1, $pages, $page);
}
if ($page < $pages && !empty($nextpage)) {
$output .= "<a href='" . get_pagenum_link($page + 1) . "' class='emm-next'>$nextpage</a>";
}
$output .= $after;
}
if ($echo) {
echo $output;
}
return $output;
}
function emm_paginate_loop($start, $max, $page = 0) {
$output = "";
for ($i = $start; $i <= $max; $i++) {
$output .= ($page === intval($i))
? "<span class='emm-page emm-current'>$i</span>"
: "<a href='" . get_pagenum_link($i) . "' class='emm-page'>$i</a>";
}
return $output;
}
Pues bien, ya hemos creado las funciones emm_paginate y emm_paginate_loop, además de especificar ya el código de salida con los estilos pertinentes para luego estilizar con CSS.
Ahora tendremos que abrir el archivo “index.php” y localizar algo como esto:
<div class="navigation">
<div class="next-posts"><?php next_posts_link('« Older Entries') ?></div>
<div class="prev-posts"><?php previous_posts_link('Newer Entries »') ?></div>
</div>
Y simplemente sustituimos esta “fea y poco efectiva” paginación por la nuestra, sustituyendo ese código por el siguiente:
<div class="pagenav">
<?php if (function_exists("emm_paginate")) {
emm_paginate();
} ?>
</div>


Oye una pregunta. ¿Donde encuentro el functions.php? no lo encuentro por ningun sitio.
Por si sirve de ayuda, mi sitio es ericavila.wordpress.com y mi theme es Elegant Grunge. A ver si alguien me puede ayudar, lo necesito para un trabajo del instituto. Gracias.
Hola Eric,
El archivo functions.php, lo puedes encontrar dentro del folder de tu theme
Un saludo.