Paginación para post y custom post types wordpress 2019

Author : Jhon

Publicado : 26 agosto, 2019

Existen varias formas de crear paginaciones para nuestras páginas de wordpress, como por ejemplo los post tradicionales de wordpress que mostramos en nuestra página home.php.

al crear en la raíz de nuestros archivos la página home.php wordpress nos imprime todas nuestras entradas en esta página, solo basta con hacer un simple loop. En este caso solo basta con hacer un paginado simple, a continuación dejo abajo un ejemplo :

<?php
/**
* En la jerarquia el home.php es la página donde se muestran todas las entradas de blog
*/
get_header(); ?>

<div class=»container»>
<div class=»row row-entradas»>

<?php
if ( have_posts() ) :
while ( have_posts() ): the_post();
?>
<div class=»col-xl-4 col-lg-4 col-md-4 col-sm-4 col-12″>
<div class=»entradas»>
<?php
$size = ‘entradas’;
$post_thumbnail_id = get_post_thumbnail_id($post->ID);
$imagen = wp_get_attachment_image_src($post_thumbnail_id, $size);
?>

<img src=»<?php echo $imagen[0]; ?>» alt=»»>
<h3><?php the_title(); ?></h3>
<p><?php the_excerpt(); ?></p>
<div class=»boton-home boton-3″>
<a href=»<?php the_permalink(); ?>»>
<button class=»btn btn-outline-success boton-read-more»>
<?php echo __(‘Read More’, ‘atr-opt’); ?>
</button>
</a>
</div>
</div>
</div>
<?php endwhile; ?>
</div>
<div class=»row row-paginacion»>
<div class=»nav-previous alignleft»><?php previous_posts_link( ‘Older posts’ ); ?></div>
<div class=»nav-next alignright»><?php next_posts_link( ‘Newer posts’ ); ?></div>

<?php else : ?>
<p><?php _e(‘Sorry, no posts matched your criteria.’); ?></p>
<?php endif; ?>
</div>
</div>

<?php get_footer(); ?>

Ahora para crear un paginado  en un custom post type (CPT) debemos hacer una query, en este caso es más complejo.
Aquí dejo un ejemplo del código completo de una página donde traigo las publicaciones de mi CPT :

<?php
/**
* Pagina Themes del Menu que muestra todos los Post del Custom Post Type
*/
get_header(); ?>

<div class=»container»>
<?php
/**
* $paged = es el paginado, con esto preparo la paginacion de mi CPT
* esta variable dice, si la consulta tiene un paginado convierteme paginado a entero
*/
$paged = ( get_query_var( ‘paged’ ) ) ? absint( get_query_var( ‘paged’ ) ) : 1;

/**
* $args, argumentos para el CPT
*/
$args = array(
‘post_type’ => ‘themes’,
‘posts_per_page’ => 2,
‘date’ => ‘rand’,
‘post_status’ => ‘publish’,
‘paged’ => $paged
);

$themes = new WP_Query( $args );

//var_dump($themes);
?>

<?php while ( $themes->have_posts() ) : $themes->the_post(); ?>

<div class=»row row-themes»>
<div class=»col-xl-6 col-lg-6 col-md-6 col-sm-12 col-12 imagen»>
<div class=»sombra»>
<div class=»ver-demo»>
<a href=»<?php the_field(‘url’); ?>» target=»_blank»>ver demo</a>
</div>
</div>
<img src=»<?php echo get_the_post_thumbnail_url(); ?>» alt=»» class=»img-fluid»>
</div>
<?php
$image = ATR_DIR_URI . ‘public/img/textura-1.png’;
//var_dump($image);
?>
<div class=»col-xl-6 col-lg-6 col-md-6 col-sm-12 col-12″ style=»background-image: url(‘<?php echo $image; ?>’)»>
<a class=»title» href=»<?php the_permalink(); ?>»>
<span><?php the_title(‘<h3>’, ‘</h3>’); ?></span>
</a>
<span class=»content-theme»><?php the_excerpt(); ?></span>
<span><?php echo __(‘Categorías : ‘, ‘atr-opt’ ); the_category(‘, ‘); ?></span>
<div class=»theme-buttons»>
<a class=»theme» href=»<?php echo esc_url(get_field(‘archivo’)); ?>»>
<button type=»button» class=»btn btn-info»>Download Theme</button>
</a>
<a class=»documentation» href=»<?php echo esc_url(get_field(‘documentation’)); ?>»>
<button type=»button» class=»btn btn-info»>Documentation</button>
</a>
</div>
<?php //var_dump(get_field(‘archivo’)); ?>
</div>
</div><!–row–>

<?php endwhile; wp_reset_postdata(); ?>

<?php
/**
* paginacion para custom post types
*/
$big = 9999999;

$args = array(
‘base’ => str_replace( $big, ‘%#%’, esc_url( get_pagenum_link( $big ) ) ),
‘format’ => ‘?paged=%#%’,
‘current’ => max( 1, get_query_var( ‘paged’ )),//toma el valor 1 de la consulta ‘paged’
‘show_all’ => false,
‘end_size’ => 1,
‘mid_size’ => 2,
‘prev_next’ => true,
‘prev_text’ => __(‘« Previous’, ‘atr-opt’),
‘next_text’ => __(‘Next »’, ‘atr-opt’),
‘type’ => ‘plain’,
‘add_args’ => false,
‘add_fragment’ => »,
‘before_page_number’ => »,
‘after_page_number’ => »,
//$themes es la variable que almacena el new WP_Query();
‘total’ => $themes->max_num_pages
);
?>

<div class=»row paginate-links»>
<?php echo paginate_links($args); ?>
</div>

</div><!–container–>
<?php get_footer(); ?>

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  • José Luis dice:

    Buenas tardes, gracias por tu aporte, pero hay algo más que no debo estar teniendo en cuenta, ya probé varias soluciones y con el mismo inconveniente, estoy en pagina de inicio queriendo paginar un Custom Post personalizado, la pagina la primera vez se muestra bien, inclusive con los botones haciendo referencia a la cantidad de páginas que tendría que tener, pero al avanzar de página (mostrar post más antiguos) me salta a una página vacía (solo encabezado y pie) que no es mi página de inicio y menos de mostrar los post de la otra página. Gracias

    • Jhon dice:

      Buenos días Jose Luis, fíjate bien en el código de este post, por que funciona bien, verifica que la query que estés haciendo para recuperar las publicaciones de tu CPT este bien y sobre todo en los parámetros que estas pasando a los argumentos del método paginate_links()