Paginación en una plantilla de página personalizada

2

He configurado un tipo de publicación personalizada llamada 'Eventos'. Por razones en las que no voy a entrar, elegí no usar archive-events.php como la plantilla de archivo para mis eventos. En su lugar, decidí crear una plantilla de página personalizada, page-upcoming-events.php , para usar como un archivo.

Escribí una consulta personalizada en esta plantilla para arrastrar eventos. También estoy limitando posts_per_page a 4. He agregado exitosamente enlaces de paginación usando las funciones previous_posts_link() y next_posts_link() .

Estas funciones están generando enlaces a las URL esperadas: / coming-events / page / 2 /, etc.

En la página 1, obtengo los primeros 4 eventos y el siguiente enlace de eventos.

El problema que tengo es que cuando voy a la página 2, aparece un error 404, no los eventos 5-8.

¿Cómo agrego correctamente la paginación a una plantilla de página personalizada?

    
pregunta joeljoeljoel 25.10.2011 - 20:23

1 respuesta

5

Esto es lo que hago para la paginación. Espero que te ayude a seguir el camino correcto, puede ser una exageración por lo que estás tratando de hacer ...

Primero establezco $ paginado:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

Luego construya su matriz $ args, asegúrese de llamar:

'paged' => $paged

Ejecute su consulta, incluidas las funciones necesarias para la paginación (esto es una muestra, cambie lo que necesita para que sea suya):

        //the query using arguments above
        $wp_query = new WP_Query( $args );

        //use the query for paging
        $wp_query->query_vars[ 'paged' ] > 1 ? $current = $wp_query->query_vars[ 'paged' ] : $current = 1;

        //set the "paginate_links" array to do what we would like it it. Check the codex for examples http://codex.wordpress.org/Function_Reference/paginate_links
        $pagination = array(
            'base' => @add_query_arg( 'paged', '%#%' ),
            //'format' => '',
            'showall' => false,
            'end_size' => 4,
            'mid_size' => 4,
            'total' => $wp_query->max_num_pages,
            'current' => $current,
            'type' => 'plain'
        );

        //build the paging links
        if ( $wp_rewrite->using_permalinks() )
            $pagination[ 'base' ] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );

        //more paging links
        if ( !empty( $wp_query->query_vars[ 's' ] ) )
            $pagination[ 'add_args' ] = array( 's' => get_query_var( 's' ) );

        //run the query
        if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();

Todo lo que queda es decirle a la página dónde desea que se vincule la página:

        //print the paging links to the page
        echo '<div class="pydPaging">' . paginate_links($pagination) . '</div>';

Nuevamente, esto puede ser excesivo, pero funciona bien.

    
respondido por el mgyura 01.12.2011 - 18:56

Lea otras preguntas en las etiquetas