web-dev-qa-db-fra.com

Le nombre de publications par page ne fonctionne pas?

OK, voici mon prob. J'ai une page d'accueil statique et une page séparée sur mon site wordpress. J'ai défini les deux dans le panneau d'administration. Maintenant, j’ai également défini le nombre maximal de publications à afficher à 5 (dans les paramètres> lecture), mais toutes les publications (10+) sont toujours affichées sur la page du blog.

J'affiche également les 3 derniers messages sur la page d'accueil statique à l'aide d'une requête personnalisée. c'est à dire

$wp_query = new WP_Query( array( 'posts_per_page' =>3));

<results loop code>

Mais cette liste affiche également plus de 3 publications. Il semble que wordpress ignore la limite posts_per_page que j'ai définie si je le fais depuis le panneau d'administration ou via du code. Que diable se passe-t-il? C'est la première fois que j'utilise WordPress pour développer un site. Est-ce un problème commun pour les noobs?

MODIFIER:

J'ai simplement dépouillé la page d'accueil statique et laissé un bloc de code de base qui récupère simplement les titres des publications. Plus de 3 messages sont toujours en cours de retour. Voici le code actuel (et unique) présent sur la page d'accueil:

<div id="content">

  <?php $wp_query = new WP_Query( array( 'posts_per_page' => 3) );?>

  <?php if ( $wp_query->have_posts() ) : ?>
  <ul>
    <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    <li>
      <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
    </li>
    <?php endwhile;?>
  </ul>
  <?php endif; ?>

</div>
3
JCoder

Cela pourrait être causé par un thème ou un plugin surchargeant les paramètres WordPress. Vous pouvez essayer d'activer le thème TwentyEleven ou TwentyTen, ainsi que de désactiver tous les plugins, pour voir si cela fonctionne.

Si tel est le cas, vous pouvez poster le thème que vous utilisez (s'il est déjà construit) ou les plug-ins que vous avez dû désactiver pour le faire fonctionner - et nous pouvons voir ce qui peut être fait pour y remédier.

1
OleVik

Je voulais ajouter mon cas à cette liste car il m'a fallu un certain temps pour déboguer. Ce qui se passe, c'est que j'ai changé le nombre de publications d'une page d'archive affichée en se raccordant au hook pre_get_post:

add_filter('pre_get_posts', 'number_of_posts_on_archive');
function number_of_posts_on_archive($query)
{
    if(is_post_type_archive(array('post_type1', 'post_type2')))
    {
        $query->set('posts_per_page', 20);
    }
    return $query;
}

Et pour résoudre le problème qui incluait la requête post pour un type de post complètement différent, j’ai ajouté quelque chose comme ceci à l’instruction if:

if( (is_post_type_archive(array('post_type1', 'post_type2'))) && ($query->get('post_type') !== 'post') )
{
    ....
}

La raison pour laquelle je le publie ici est que c'est le premier résultat qui est apparu sur Google Recherche liée à la recherche que je l'ai faite. Cela pourrait donc aider quelqu'un qui ne peut pas comprendre pendant une heure ... ou deux pourquoi la requête ne veut tout simplement pas vous écouter.

1
N.Schipper
 //just before calling your code add this and customize it as you like
 function hwl_home_pagesize( $query ) {
if ( is_admin() || ! $query->is_main_query() )
    return;

if ( is_home() ) {
    // Display only 1 post for the original blog archive
    $query->set( 'posts_per_page', 1 );
    return;
}

if ( is_post_type_archive( 'movie' ) ) {
    // Display 50 posts for a custom post type called 'movie'
    $query->set( 'posts_per_page', 50 );
    return;
  }
}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );
1
ashraf mohammed

N.Schipper a dit correctement. Mais la seule chose à la condition n'est pas une condition suffisante

! is_admin ()

Ainsi, le nombre de publications par page ne sera modifié que dans les cycles nécessaires et n'affectera pas la zone d'administration.

if( (! is_admin()) && (is_post_type_archive(array('post_type1', 'post_type2'))) && ($query->get('post_type') !== 'post') )
{
  {
    $query->set( 'posts_per_page', 6 );
    return;
}
}
0
stefarer