web-dev-qa-db-fra.com

Pagination sur un modèle de page personnalisé

J'ai mis en place un type de message personnalisé appelé "Événements". Pour des raisons que je ne vais pas aborder, j'ai choisi de ne pas utiliser archive-events.php comme modèle d'archive pour mes événements. Au lieu de cela, j'ai décidé de créer un modèle de page personnalisé, page-upcoming-events.php, à utiliser comme archive.

J'ai écrit une requête personnalisée dans ce modèle pour extraire des événements. Je limite également posts_per_page à 4. J'ai correctement ajouté des liens de pagination à l'aide des fonctions previous_posts_link() et next_posts_link().

Ces fonctions génèrent des liens vers les URL attendues:/coming-events/page/2 /, etc.

À la page 1, je reçois les 4 premiers événements et le lien suivant.

Le problème que j'ai est que lorsque je vais à la page 2, je reçois une erreur 404, pas les événements 5 à 8.

Comment ajouter correctement la pagination à un modèle de page personnalisé?

2
joeljoeljoel

C'est ce que je fais pour la pagination. J'espère que cela vous aidera à vous mettre sur la bonne voie, ce sera peut-être exagéré pour ce que vous essayez de faire ...

D'abord j'ai mis $ paginé:

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

Ensuite, construisez votre tableau $ args, assurez-vous d'appeler:

'paged' => $paged

Exécutez votre requête en incluant les fonctions nécessaires à la pagination (voici un exemple, modifiez ce dont vous avez besoin pour la personnaliser):

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

Il ne reste plus qu'à indiquer à la page où vous voulez les liens de page:

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

Encore une fois, cela peut être exagéré, mais cela fonctionne bien.

5
mgyura