J'ai construit une section d'actualités sur mon site Wordpress avec les champs personnalisés avancés et les plug-ins d'interface utilisateur personnalisés. Sur la page de présentation des actualités personnalisée (pas les publications wordpress standard), je voulais limiter le nombre de nouvelles par page à six et fournir une navigation avec paginate_links. J'ai construit l'extrait suivant:
<section class="news-main" role="main">
<?php
$args = array(
'post_type' => 'news',
'posts_per_page' => '6'
);
$the_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
$pagination = array(
'base' => '%_%',
'format' => '?page=%#%',
'total' => $the_query->max_num_pages,
'prev_next' => True,
'prev_text' => __( '<< Previous' ),
'next_text' => __( 'Next >>' )
);
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<article class="news-snippet">
<header class="news-box">
<h2 class="mus-hi slogan-head fancy"><span class="fancy-hook"><?php the_time( 'j. F Y' ); ?></span></h2>
<a href="<?php the_permalink(); ?>"><p class="bran-hn slogan-state closure"><?php the_title(); ?></p></a>
</header>
<div class="news-wrap">
<p class="news-excerpt"><?php echo acf_excerpt( 'news_post', 35, ' <span class="news-more-inbox">[...]</span>' ); ?></p>
<p class="bran-hn news-more"><a href="<?php the_permalink(); ?>">More →</a></p>
</div>
</article>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p>No entries</p>
<?php endif; ?>
<nav>
<?php echo paginate_links( $pagination );
$wp_query = NULL;
$wp_query = $temp_query; ?>
</nav>
</section>
Les arguments de wp_query sont d’abord définis, puis $the_query
est défini avec un WP_Query, puis la variable $wp_query
est enregistrée dans une variable temporaire, réinitialisée avec NULL, puis définie sur la variable $the_query
. Dans la dernière étape, le tableau de paramètres pour paginate_links
est défini. Ensuite, il y a la boucle de sortie des articles de presse. Après la boucle, la fonction paginate_links est appelée et le $wp_query
a finalement été réinitialisé et écrit le contenu de la variable temporaire $temp_query
.
Si j’ai, disons, 15 articles de blog, mon résultat est le suivant:
Si je survole le numéro trois, la fin du slug ressemble à ceci:
Le problème est maintenant les liens précédents et suivants ne sont pas affichés même s'ils sont définis. Alors que le problème principal est le slug donné - si je clique sur le numéro trois, je tombe sur une page 404. "page 3" où je suis dirigé vers est inconnu pour wordpress. Merci d'avance Ralf
Mettre à jour:
$args = array(
'post_type' => 'news',
'posts_per_page' => '1'
);
$the_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
$total_pages = $wp_query->max_num_pages;
if ( $total_pages > 1) {
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$current_page = new WP_Query('post_type=news&posts_per_page=1&paged=' . $paged);
$pagination = array(
'base' => '%_%',
'format' => '?paged=%#%',
'mid-size' => 1,
'current' => $current_page,
'total' => $total_pages,
'prev_next' => True,
'prev_text' => __( '<< Previous' ),
'next_text' => __( 'Next >>' )
);
}
Mise à jour 2:
Ok avec les modifications suivantes à la première partie du code, j'ai obtenu le nav qui fonctionne
$args = array(
'post_type' => 'news',
'posts_per_page' => '3',
'paged' => get_query_var( 'paged' )
);
$the_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
$total_pages = $wp_query->max_num_pages;
if ( $total_pages > 1) {
$the_paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$pagination = array(
'base' => @add_query_arg('paged','%#%'),
'format' => '?paged=%#%',
'mid-size' => 1,
'current' => $the_paged,
'total' => $total_pages,
'prev_next' => True,
'prev_text' => __( '<< Previous' ),
'next_text' => __( 'Next >>' )
);
}
La seule question qui me reste (la seule chose qui fonctionne encore mal) est-il possible que le premier lien ait un lien au lieu d'un lien /? Paginé = 1
En ce qui concerne le nombre de pages affichées, lisez les arguments de paginate_links
, en particulier end_size
et mid_size
.
En ce qui concerne 404- Le problème est qu’il n’ya pas de page 3. Qu'une page renvoie ou non du contenu ou charge le modèle 404 est basée sur les résultats de la requête main , et non de votre requête personnalisée que vous exécutez dans le modèle. S'il s'agit d'un type d'article page
, essayez de définir la variable paged
au lieu de page
.