Si estás utilizando un custom loop para alguna plantilla de tu child theme de Genesis Framework, por ejemplo para un custom post type, y necesitas paginar los resultados, es posible que por defecto te esté mostrando una página de más, vacía, al final de todos los resultados.
Este error es debido a que el cálculo del número de páginas se está realizando sobre el total de entradas y no las filtradas en else loop.
Para solucionarlo, tenéis este código de ejemplo que podéis modificarlo para adaptarlo a vuestro caso en concreto:
remove_action( 'genesis_loop', 'genesis_do_loop' );
add_action( 'genesis_loop', 'esl_custom_loop' );
function esl_custom_loop() {
global $paged;
$paged = 1;
$order = 'DESC';
$order = $_GET['orden'];
if ( get_query_var( 'paged' ) ) {
$paged = get_query_var( 'paged' );
}
if ( get_query_var( 'page' ) ) {
$paged = get_query_var( 'page' );
}
$paged = intval( $paged );
// accepts any wp_query args.
$args = (array(
'post_type' => 'cursos',
'order' => $order,
'orderby' => 'date',
'paged' => $paged,
'posts_per_page' => 18
));
genesis_custom_loop( $args );
}
Modificando el ‘post_type’, y el número de posts por página y orden en el que quieras que aparezcan podrás adaptarlo a los resultados que necesitas mostrar.
¿Eres implementador o desarrollador WordPress?
En la Zona DPW encontrarás más recursos, tutoriales, plantillas, y una biblioteca de snippets para poder utilizar en tu día a día y ganar tiempo en tu trabajo:
ACCEDER AHORA
Comentarios
5 respuestas a «Custom loop con paginación en Genesis Framework»
|
Hola ester, tu sabrías que tendria que añadir o cambiar para que al mostrar mi Custom Post Type en el loop solo aparescan los Post padre y no los hijos? no se si me he explicado bien.
// Genesis CPT Loop
remove_action( ‘genesis_loop’, ‘genesis_do_loop’ );
add_action( ‘genesis_loop’, ‘lq_custom_loop’ );
function lq_custom_loop() {
global $post;
$args = array(
‘post_parent’ => 0,
‘posts_per_page’ => -1,
‘orderby’ => ‘date’,
‘order’ => ‘ASC’,
‘post_type’ => ‘curso’,
‘post_status’ => ‘publish’
);
$mypost = get_pages( $args );
foreach ( $mypost as $post ) : setup_postdata( $post ); ?>
<a href="»>
<?php endforeach;
wp_reset_postdata();
}
|
Hola Luis!
Pues el parámetro post_parent => 0 es correcto, te debería coger únicamente las entradas que no tienen post padre. ¿No te funciona? ¿Te devuelve todos incluso los posts hijo?
Saludos,
|
Si, me devuelve tanto los padres como los hijos.
Me pasa lo mismo cuando quiero que en un post padre solo muestre los post hijos asociados a este. Lo que si mefunciona con el codigo de acontinuacion es que entrado en el post hijo solo se muestren los post hermanos a este.
post_parent !== 0){
// This is a subpage
add_action( ‘genesis_after_entry’, ‘nv_capitulos_hermano’ );
function nv_capitulos_hermano(){
global $post;
$args = array(
‘post_type’ => ‘curso’,
‘child_of’ => $post->post_parent,
‘title_li’ => __( ‘Todos los capítulos’ ),
);
wp_list_pages( $args );
}
}
else {
// This is not a subpage
add_action( ‘genesis_after_entry’, ‘nv_capitulos_hijo’ );
function nv_capitulos_hijo(){
global $post;
$args = array(
‘post_type’ => ‘curso’,
‘posts_per_page’ => -1,
‘post_parent’ => $post->ID,
‘order’ => ‘ASC’,
‘orderby’ => ‘menu_order’
);
$parent = new WP_Query( $args );
?>
have_posts() ) : ?>
have_posts() ) : $parent->the_post(); ?>
<a href="» title=»»>
<?php
}
|
El codigo del primer comentario lo tengo en mi front-page.php y el segundo en mi function.php
|
Hola Luis!
Es complicado sin tener toda la estructura del sitio poder ayudarte, pero en el último código veo que utilizas child_of, que es un argumento de wp_list_pages, que sirve para listar páginas e igual te sirve para lo que necesitas en lugar de llamar a wp_query. Aquí tienes más info sobre esa función: https://developer.wordpress.org/reference/functions/wp_list_pages/
Saludos!