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é?
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.