Alors voilà, je ne m'en sors pas. N'étant pas un pro du tout en pur php, là je nage.
Voilà le souci :
J'ai intégré une pagination à mon site, avec un bout de code que j'ai sorti en farfouillant à droite à gauche, via le codex...Mais voilà, lorsque je clic sur page suivante ou que je clic sur le lien d'aune autre page ( 2, 3...), je reste sur la même page. Pourtant, le lien appelé est bien /page/2/ et c'est celui qui apparait en permalink.
if( !function_exists( 'theme_pagination' ) ) {
function theme_pagination() {
global $wp_query, $wp_rewrite;
$wp_query->query_vars'paged'] > 1 ? $current = $wp_query->query_vars'paged'] : $current = 1;
$pagination = array(
'base' => @add_query_arg('page','%#%'),
'format' => '',
'total' => $wp_query->max_num_pages,
'current' => $current,
'show_all' => false,
'end_size' => 1,
'mid_size' => 2,
'type' => 'list',
'next_text' => 'Page Suivante ?',
'prev_text' => '? Page Précédente'
);
if( $wp_rewrite->using_permalinks() )
$pagination'base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );
if( !empty($wp_query->query_vars's']) )
$pagination'add_args'] = array( 's' => str_replace( ' ' , '+', get_query_var( 's' ) ) );
echo str_replace('page/1/','', paginate_links( $pagination ) );
}
}
J'ai déjà cherché la solution via mon meilleur pote ( google ), celui-ci ne me donne que des indices et me parle de wp_query. j'ai des éléments de réponse, mais franchement, je n'ai aucune idée de comment m'en sortir. A priori, ça doit venir de la loop qui appelle plusieurs fois wp_query ? Bref...
En attendant, j'ai installé wp_pagenavi. Alors lui, il fonctionne...jusqu'à ce que je mette en place l'url_rewriting( à savoir /%postname%/ ). Dès que je clic qq part, je tombe sur une 404...
Mais bon, j'aimerai surtout faire fonctionner la pagination sans plugin, question de souplesse...
Ci-joint, mon index.php et mon content.php, pour la loop.
get_header(); ?>
<div id="container">
<section id="content">
<?php if(have_posts()) : ?>
<?php while(have_posts()) : the_post(); ?>
<?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>
<?php theme_pagination(); ?>
<div class="clear"></div>
<?php endif; ?>
</section><!-- #content -->
<?php get_sidebar(); ?>
</div><!-- #container-->
<div class="clear"></div>
<?php get_footer(); ?>
<article class="post" id="post-<?php the_ID(); ?>">
<header class="post-header">
<h1 class="post-title">
<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</h1>
<aside class="post-meta">
Posté le <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_time( get_option( 'date_format' ) ); ?></a> par <?php the_author_posts_link(); ?> |
Catégorie: <?php the_category(', ') ?> |
<?php comments_popup_link('Pas de commentaire', '1 Commentaire', '% Commentaires'); ?> <?php edit_post_link('Editer', ' | ', ''); ?>
</aside><!-- #post-meta -->
</header><!-- #post-header -->
<div class="post-content">
<?php the_excerpt(); ?>
</div><!-- #post-content -->
<footer class="read-more">
<a href="<?php echo get_permalink(); ?>"> Lire la suite...</a>
</footer>
<div class="clear"></div>
</article><!-- #post -->
Et bien entendu, merci d'avance pour votre aide :)
Salut, je suis en train de confectionner un site sur Wordpress, même si j'ai quelques problèmes, la pagination fonctionne, voici le code que j'ai utilisé dans mon fichier loop.php :
La boucle :
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<!-- Contenu -->
<?php endwhile; ?>
<?php else : ?>
<div class="nothing">
<p>Aucune publication...</p>
</div>
<?php endif; ?>
Et le code pour la pagination :
<!-- Pagination -->
<div class="pagination">
<?php
global $wp_query;
$big = 999999999;
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%', // A ne pas modifier pour que l'url rewriting fonctionne
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'prev_text' => __('Précédent'),
'next_text' => __('Suivant'),
));
?>
</div>
<!-- FIN : Pagination -->
N'hésite pas à consulter la doc Wordpress pour personnaliser tes liens de navigation et si ça ne fonctionne pas, on essayera de voir pourquoi !
Merci pour ta réponse GaelG.
Alors j'ai fait un petit test avec ton code qui m'a l'aide de fonctionner, jusqu'à l'url_rewriting. Dès que ce dernier est enclenché, il me renvoie un not found ( le lien est /page/2/ ).
En y regardant de plus près, ton code se rapproche du mien, avec beaucoup moins de superflu, et pourtant il fonctionne de la même manière. Je vais juste lui rajouter un 'type' => list histoire de regrouper la pagination.
Je vois aussi que le mid_size et end_size ne sont pas indiqués mais fonctionnent quand même, peut-être en valeur par défaut.
Bref, je veux comprendre :) Merci encore pour ta réponse
Le problème doit se trouver autre part, ce code étant fonctionnel sur un WordPress de base (qui n'a pas été pollué par certains plugins). Tu as essayé de désactiver tout les plugins ? Essaye de voir si tu n'as pas moyen de refaire un WordPress propre sur lequel la pagination et l'url rewriting fonctionneraient correctement.
Le truc, c'est que j'ai un theme perso 'de base'... il n'y a rien de superflux, pas de plugin, juste un code jquery pour un highlight de div... rien d'extravaguant...
Je ne comprends toujours pas...
Quand je pense que j'ai plein d'autres trucs à mettre, et que je suis bloqué aussi à ces trucs...
Essaye de refaire le fichier loop.php propre en suivant ce tutoriel http://wordpress.bbxdesign.com/la-boucle et en ajoutant le code pour la pagination que je t'ai donné pour voir si ça fonctionne.
même chose. mais je me rends compte aussi qu'un clic sur un article me renvoie la même erreur.
Il semble y avoir beaucoup de problèmes effectivement !
Je te propose donc de réinstaller un WordPress vide et propre en utilisant ce thème : http://goo.gl/mXh7a, il s'agit d'un thème simple contenant l'essentiel pour afficher les posts/catégories/archives/pages...etc. Il est inspiré du thème BBX Desert auquel j'ai ajouté les CSS et Scripts JS de Foundation 4 pour apporter un minimum de mise en forme. Il contient un système basique (mais fonctionnel) de pagination.
Après avoir tout installé et créé quelques posts de test, il suffit d'aller dans les Réglages/Lecture et modifier le nombre d'articles affichés (par défaut à 10) ce qui affichera automatiquement la pagination. Si tout fonctionne (ce qui est le cas chez moi), tu n'as plus qu'à transférer tout ce que tu as fait et normalement, le problème devrait être résolu !
Bon bon bon...j'ai fait plusieurs test, et le résultat est pas génial...
Avec le thème que tu m'as fourni et les permaliens par défaut, c'est fonctionnel.
le lien appelé pour la page 2 est /?paged=2
Je passe en permaliens /%postname%/ ( ou autre, j'ai essayé ), la page est introuvable ( url not found )
Le lien appelé pour la page 2 est /page/2/
Les liens pour les posts ne fonctionnent pas non plus, ni pour les pages d'archive...rien, sauf la front...
Au moins, on peut supposer que le problème vient d'autre part, car avec ma configuration (Windows 8/Wamp Server/WordPress 3.5.1) tout fonctionne sans aucun problème, se pourrait-il que tu ais un problème au niveau de Wamp ?
Nouvel élément de réponse : J'ai réussi à faire fonctionner le tout en ajoutant "index.php/" devant ma structure de permalinks /%postname%/ .
Bon, voilà, ça marche, mais c'est moche. ça détraque tout mon css, fonts...
De mémoire ça vient de .htaccess ?
Effectivement, cela doit venir du .htaccess, as-tu essayé de réinstaller Wamp ?
Par contre, si tu utilises les url dynamiques générées par WordPress, normalement, tu ne devrais pas avoir de problème pour les css et fonts. Il suffit d'utiliser les fonctions : get_template_directory(), get_template_directory_uri ... etc