Custom loop con paginación en Genesis Framework

Código para que un custom loop calcule muestre correctamente la páginación de nuestros posts.


por

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»

  1. Avatar de Luis

    |

    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();

    }

    1. Avatar de esther

      |

      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,

  2. Avatar de Luis

    |

    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
    }

  3. Avatar de Luis

    |

    El codigo del primer comentario lo tengo en mi front-page.php y el segundo en mi function.php

    1. Avatar de esther

      |

      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!