J'ai un index.php avec un article en vedette et un certain nombre d'autres articles et le wp_pagenavi standard au bas.
J'utilise les 2 boucles du codex wordpress comme ceci:
<?php $my_query = new WP_Query('category_name=featured&posts_per_page=1');
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID;?>
<!-- Do stuff... -->
<?php endwhile; ?>
<!-- Do other stuff... -->
<?php if (have_posts()) : while (have_posts()) : the_post();
if( $post->ID == $do_not_duplicate ) continue; ?>
<!-- Do stuff... -->
<?php endwhile; endif; ?>
Si j'ai bien lu la hiérarchie des thèmes, une page archive.php doit être utilisée lorsque vous cliquez sur "Précédent" dans la section de pagination ... (correct?)
Cependant, ce n'est pas le cas, cliquer sur précédent me montre une page avec la même mise en page que mon index.php et donc avec le même message en vedette. (la pagination sur les autres postes fonctionne bien)
J'ai déconné avec is_paged
mais je n'ai pas réussi à le faire fonctionner ... Merci pour l'aide!
En bref non - le modèle utilisé est basé sur la requête et lors de la pagination, vous répétez essentiellement la même requête, mais pour une page différente. En général, le modèle sera le même.
archive.php
peut être utilisé pour la plupart des requêtes, mais il existe souvent des modèles préférables (par exemple, modèles de catégorie, modèles de tag, modèles d'auteur, etc.). Ce qui est préférable est déterminé par la hiérarchie de modèles . Cependant, pour la page d'accueil, index.php
est souvent utilisé et le modèle persistera avec la pagination.
Pour n’afficher que quelque chose sur la 'page 1', vous pouvez essayer ce qui suit:
<?php
//initialize $do_not_duplicate
$do_not_duplicate=0;
//is_paged returns true if we are on page 2,3,...
if(!is_paged()):
//Get featured content for page 1
$my_query = new WP_Query('category_name=featured&posts_per_page=1');
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID;
//Do stuff...
endwhile;
endif;
//Display rest of content
if (have_posts()) :
while (have_posts()) : the_post();
if( $post->ID == $do_not_duplicate ) continue;
//Do stuff
endwhile;
endif;
?>
Non testé
is_paged
est juste une fonction booléenne si la liste a plusieurs pages ou non.
Ce dont vous avez besoin est: $wp_query->query_vars['paged']
. Entourez votre code postal avec,
global $wp_query;
if ( !isset($wp_query->query_vars['paged']) || $wp_query->query_vars['paged'] == 1 ) :
# Featured post code
endif;
Je pense que ça va faire l'affaire pour vous.
Facile: WP a eu beaucoup à faire pour cela. Aucun accès direct à un tableau ou à un objet n'est nécessaire.
// Before the loop
$paged = get_query_var( 'paged' );
// In the loop
if (
( ! isset( $paged ) OR ! $paged )
AND is_sticky( get_the_ID() )
{
// do stuff
}
Ajoutez cette instruction conditionnelle dans votre fonction personnalisée.
if ( is_home() && get_query_var( 'paged' ) >= 2 )