Crear un Paginador en WordPress ?
Cuando creamos nuestro propio plugin en ocaciones es necesario manejar grandes cantidades de registros por lo que debemos segmentarlos en ciertas cantidades (de 10 en 10 o de 15 en 15).
En la carpeta “wp-content/plugins/” vamos a crear la carpeta paginador en donde creamos un archivo paginador.php en el cual colocaremos el siguiente codigo:
<?php
/*
Plugin Name: paginador
Plugin URI:
Description:
Version: 1.0.0
Author:
Author URI:
License: GPLv2
*/
//INICIALIZA LA CONFIGURACION
add_action("admin_menu", "opciones_de_admin");
if (!function_exists("opciones_de_admin")) {
function opciones_de_admin() {
add_options_page("Paginador", "Paginador", "manage_options", "id_menu", "ec_ver_actual");
}
}
if (!function_exists("ec_ver_actual")) {
function ec_ver_actual() {
//Variable que nos proporciona la conexion a la bd
global $wpdb;
//Obtenemos la cantidad total de articulos
$sqlTotalReg = "
SELECT
posts.ID,
posts.post_title
FROM
" . $wpdb->prefix . "posts as posts
WHERE
posts.post_type='post' AND
posts.post_status='publish'";
$resultTotalReg = $wpdb->get_results($sqlTotalReg, OBJECT);
$numTotalRegistros = count($resultTotalReg);
//Cantidad de registros por pagina
$tamanoPagina = 10;
//Jalamos las variables del paginador para calcular el offset
if ((isset($_GET['paged'])) && ($_GET['paged'] != '')) {
$offset = ($_GET['paged'] - 1) * $tamanoPagina;
}
else {
$offset = 0;
}
//Query que obtiene todos los articulos
$sql = "
SELECT
posts.ID,
posts.post_title
FROM " . $wpdb->prefix . "posts as posts
WHERE
posts.post_type='post' AND
posts.post_status='publish'
ORDER BY post_date DESC
LIMIT " . $tamanoPagina . "
OFFSET " . $offset . "; ";
$result = $wpdb->get_results($sql, OBJECT);
?>
<table class="wp-list-table widefat fixed striped posts">
<thead>
<tr>
<th scope="col" class="manage-column column-tags">Id</th>
<th scope="col" class="manage-column column-tags">Titulo</th>
</tr>
</thead>
<tbody id="the-list">
<?php
foreach ($result as $contador => $articulo) {
?>
<tr>
<td>
<strong><?php echo $articulo->ID; ?></strong>
</td>
<td>
<strong><?php echo $articulo->post_title; ?></strong>
</td>
<tr>
<?php
}
?>
</tbody>
</table>
<?php
//Examino la página a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina = 1;
}
else {
$inicio = ($pagina - 1) * $tamanoPagina;
}
//Calculo el total de páginas
$totalPaginas = (round($numTotalRegistros / $tamanoPagina)) + 1;
?>
<div class="paginate">
<?php
if ((isset($_GET['paged'])) && ($_GET['paged'] != '')) {
$current = $_GET['paged'];
}
else {
$current = 0;
}
$args = array(
'base' => '%_%',
'format' => '?paged=%#%',
'total' => $totalPaginas,
'current' => $current,
'show_all' => false,
'end_size' => 3,
'mid_size' => 1,
'prev_next' => true,
'prev_text' => __('« Anterior'),
'next_text' => __('Siguiente »'),
'type' => 'plain',
'add_args' => false,
'add_fragment' => '',
'before_page_number' => '',
'after_page_number' => ''
);
?>
<?php echo paginate_links($args); ?>
</div>
<?php
}
}