Paginación numérica para tipos de contenido personalizados
He creado una página personalizada para mostrar un bucle de CPT con campos personalizados.
Necesito agregar una paginación numérica y lo intenté con este código pero no funciona.
Functions.php
function pagination_bar() {
global $wp_query;
$total_pages = $wp_query->max_num_pages;
if ($total_pages > 1){
$current_page = max(1, get_query_var('paged'));
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => '/page/%#%',
'current' => $current_page,
'total' => $total_pages,
));
}
}
custompage.php
<!--Bucle de Salmos-->
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$loop = new WP_Query( array( 'post_type' => 'salmi',
'posts_per_page' => 15,
'paged' => $paged )
);
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<!--Columnas de Contenido-->
<div class="salmicpt">
<div class="wpb_column vc_column_container td-pb-span8">
<div class="titlecpt"><?php the_title(); ?></div>
</div>
<div class="wpb_column vc_column_container td-pb-span4">
<?php if( get_field('audio_salmi') ): ?>
<a href="<?php the_field('audio_salmi'); ?>" ><img src="mysite.com/wp-content/uploads/cuffia-cpt-e1481533293805.png" alt="Escuchar" title="Escuchar" /></a>
<?php endif; ?>
<?php if( get_field('salmi_pdf') ): ?>
<a href="<?php the_field('salmi_pdf'); ?>" ><img src="mysite.com/wp-content/uploads/freccia-32.png" alt="Descargar PDF" title="Descargar PDF" /></a>
<?php endif; ?>
</div>
<div style='clear:both'></div><hr class="style-one" />
</div>
<nav class="pagination">
<?php pagination_bar(); ?>
</nav>
<?php endwhile; wp_reset_query(); ?>
¿Dónde está el error? Gracias
Estás haciendo referencia al objeto global $wp_query
en tu función, el cual has reiniciado usando wp_reset_query()
.
Puedes resolver la paginación pasando tu objeto $loop
WP_Query personalizado a la función. También cambié wp_reset_query
por wp_reset_postdata
.
Además, estás llamando a tu función de paginación dentro del bucle while en lugar de después de él.
Tu función debería actualizarse a:
function pagination_bar( $custom_query ) {
$total_pages = $custom_query->max_num_pages;
$big = 999999999; // necesitamos un entero improbable
if ($total_pages > 1){
$current_page = max(1, get_query_var('paged'));
echo paginate_links(array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => $current_page,
'total' => $total_pages,
));
}
}
y en tu archivo custompage.php:
<!--Bucle Salmi-->
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$loop = new WP_Query( array( 'post_type' => 'salmi',
'posts_per_page' => 15,
'paged' => $paged )
);
if ( $loop->have_posts() ):
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<!--Columnas de Contenido -->
<div class="salmicpt">
<div class="wpb_column vc_column_container td-pb-span8">
<div class="titlecpt"><?php the_title(); ?></div>
</div>
<div class="wpb_column vc_column_container td-pb-span4">
<?php if( get_field('audio_salmi') ): ?>
<a href="<?php the_field('audio_salmi'); ?>" ><img src="mysite.com/wp-content/uploads/cuffia-cpt-e1481533293805.png" alt="Escuchar audio" title="Escuchar audio" /></a>
<?php endif; ?>
<?php if( get_field('salmi_pdf') ): ?>
<a href="<?php the_field('salmi_pdf'); ?>" ><img src="mysite.com/wp-content/uploads/freccia-32.png" alt="Descargar PDF" title="Descargar PDF" /></a>
<?php endif; ?>
</div>
<div style='clear:both'></div><hr class="style-one" />
</div>
<?php endwhile; ?>
<nav class="pagination">
<?php pagination_bar( $loop ); ?>
</nav>
<?php wp_reset_postdata();
endif;

Muchas gracias, pero el problema persiste... veo la paginación, pero si hago clic no va a la segunda página, sino que se recarga y permanece en la misma página.
Los enlaces de los números de página son http://mysite.it/page/2/page/2/page/2/page/3?page_id=415/page/3

copia y pega en tu archivo functions.php
function pagination_bar( $query_wp )
{
$pages = $query_wp->max_num_pages;
$big = 999999999; // necesitamos un entero improbable
if ($pages > 1)
{
$page_current = max(1, get_query_var('paged'));
echo paginate_links(array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => $page_current,
'total' => $pages,
));
}
}
copia y pega el código en tu archivo custompage.php
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array('post_type'=>'salmi','posts_per_page' => 15,'paged' => $paged);
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ):
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<!--Columna de Contenido -->
<div class="salmicpt">
<div class="wpb_column vc_column_container td-pb-span8">
<div class="titlecpt"><?php the_title(); ?></div>
</div>
<div class="wpb_column vc_column_container td-pb-span4">
<?php if( get_field('audio_salmi') ): ?>
<a href="<?php the_field('audio_salmi'); ?>" >
<img src="mysite.com/wp-content/uploads/cuffia-cpt-e1481533293805.png" alt="Escuchar" title="Escuchar" />
</a>
<?php endif; ?>
<?php if( get_field('salmi_pdf') ): ?>
<a href="<?php the_field('salmi_pdf'); ?>" >
<img src="mysite.com/wp-content/uploads/freccia-32.png" alt="Descargar PDF" title="Descargar PDF" />
</a>
<?php endif; ?>
</div>
<div style='clear:both'></div><hr class="style-one" />
</div>
<?php endwhile; ?>
<nav class="pagination">
<?php pagination_bar( $the_query ); ?>
</nav>
<?php wp_reset_postdata();
endif;

Realiza los siguientes cambios en el archivo custompage.php
<?php
$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
$args = array('post_type'=>'salmi','posts_per_page' => 15,'paged' => $paged);
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ):
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<!-- Columna de Contenido -->
<div class="salmicpt">
<div class="wpb_column vc_column_container td-pb-span8">
<div class="titlecpt"><?php the_title(); ?></div>
</div>
<div class="wpb_column vc_column_container td-pb-span4">
<?php if( get_field('audio_salmi') ): ?>
<a href="<?php the_field('audio_salmi'); ?>" >
<img src="mysite.com/wp-content/uploads/cuffia-cpt-e1481533293805.png" alt="Escuchar audio" title="Haz clic para escuchar" />
</a>
<?php endif; ?>
<?php if( get_field('salmi_pdf') ): ?>
<a href="<?php the_field('salmi_pdf'); ?>" >
<img src="mysite.com/wp-content/uploads/freccia-32.png" alt="Descargar PDF" title="Descargar documento en PDF" />
</a>
<?php endif; ?>
</div>
<div style='clear:both'></div><hr class="style-one" />
</div>
<?php endwhile; ?>
<nav class="pagination">
<?php pagination_bar( $the_query ); ?>
</nav>
<?php wp_reset_postdata();
endif;
</div>
Y en functions.php
function pagination_bar( $query_wp )
{
$pages = $query_wp->max_num_pages;
$big = 999999999; // número improbable
if ($pages > 1)
{
$page_current = max(1, get_query_var('page'));
echo paginate_links(array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => $page_current,
'total' => $pages,
));
}
}
Esto funciona perfectamente
