web-dev-qa-db-fra.com

Quantité différente de publications sur la page d'accueil que les pages paginées

J'ai effectué des recherches ici et sur Google, mais tout ce que je trouve ne fonctionne pas correctement. J'espérais poster mon code ici et obtenir de l'aide pour corriger mes erreurs.

Sur la page d'index de mon site, j'ai un message "en vedette" qui a une présentation différente de celle du reste des messages. Lorsque vous cliquez sur la page suivante, cet article sélectionné disparaît et me laisse avec un nombre inégal de messages et j'ai besoin d'un nombre pair d'articles. Voici le code que j'ai trouvé et que j'ai essayé d'implémenter sans joie.

J'utilise la requête suivante (tout le reste est identique au code de compte et au-dessous):

<?php
  $page = (get_query_var('paged')) ? get_query_var('paged') : 1;
  query_posts("paged=$page&posts_per_page=10"); 
?>

C'est le code que je veux pouvoir utiliser:

<?php
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
$page_num = $paged;
    if ($pagenum='') $pagenum = 1;
    if ($pagenum > 1) { $post_num = 10 } else { $post_num = 9 }
query_posts('showposts='.$post_num.'&paged='.$page_num); `
?>

Ce serait la même chose pour le reste de la page:

<?php $count = 1; ?>

<?php while (have_posts()) : the_post(); ?>

<?php if ((!is_paged()) && ($count == 1 )){  ?>

 // FEATURED HTML HERE

<?php } else {  ?>

 // REGULAR HTML HERE

<?php } $count++; ?>

<?php endwhile; ?>

// PAGINATION HERE
2
Justice Is Cheap

Vous devriez utiliser le filtre pre_get_posts. Vous pouvez exclure la page d'accueil avec ! is_front_page ou ! is_home en fonction de votre configuration.

/**
 * Changes the number of posts per page if not is_home
 *
 * @author  SFNdesign, Curtis McHale
 */
function wptt_change_posts_on_page( $query ) {
    if ( ! is_home() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', '10' );
    }
}
add_action( 'pre_get_posts', 'wptt_change_posts_on_page' );

Comme je l'ai dit, vous devrez peut-être utiliser ! is_front_page en fonction de la configuration de votre thème. Voici un bon article de blog expliquant plus sur ces conditions.

http://wpthemetutorial.com/2011/12/12/clearing-up-confusion-about-is_home-and-is_front_page/

Oh et n'utilise jamais query_posts, evar. https://developer.wordpress.com/2012/05/14/querying-posts-without-query_posts/

2
curtismchale

La logique que vous avez proposée dans le deuxième extrait a du sens. Néanmoins, votre code comporte quelques défauts.

D'une part, la variable $pagenum est redondante et vous n'en avez pas besoin. D'autre part, vous affectez la valeur de retour de get_query_var() à $page, puis, dans les lignes suivantes, utilisez $paged - vous voulez que ce soit la même chose. Ce qui suit devrait faire:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_num = ($paged > 1) ? 10 : 9;
// query for posts

De plus, dans l'extrait de balise (le troisième de votre question), $count n'est pas nécessaire, vous pouvez simplement utiliser aussi $paged. En passant, et par souci d’exhaustivité, je n’utiliserais pas autant de balises PHP d’ouverture et de fermeture, mais c’est une question de goût et n’influencera pas les fonctionnalités de votre code.

Encore une chose: à moins qu'il ne s'agisse de votre boucle principale, vous devez utiliser la classe WP_Query au lieu de query_posts. Et si c’est le cas, l’utilisation de query_posts n’est pas aussi fausse, mais il est néanmoins recommandé de vérifier le filtre pre_get_posts .

2
Johannes Pille