J'ai plus de 500 messages et je veux limiter à 100 messages avec la pagination. Donc, 10 pages avec 10 articles dans chacune. En vous présentant le code:
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$posts = get_posts(
array(
'numberposts' => 10,
'paged' => $paged,
'meta_key' => 'property',
'orderby' => 'meta_value_num', //or 'meta_value_num'
'order' => 'DESC',
)
);
if( $posts ) {
$count = 0;
foreach( $posts as $post ) {
setup_postdata( $post );
// post stuff
$count++;
}
wp_reset_postdata();
}
Avant de commencer, n'utilisez pas get_posts
pour les requêtes paginées. get_posts
interrompt légalement la pagination et ne renvoie pas l'objet de requête. Si vous avez besoin de paginer les requêtes, utilisez WP_Query
En ce qui concerne votre problème, je ne pense vraiment pas qu'il soit possible de limiter le nombre total de messages à 100 uniquement lorsque la pagination est nécessaire. Les seuls scénarios auxquels je peux penser sont:
Supprimez les liens de page de la page 10, mais vous pouvez à nouveau entrer manuellement la page 11 et voir les messages de la page 11
Exécutez une fonction personnalisée lorsqu’une nouvelle publication est publiée pour changer le statut de publication de la 101ème publication et les publications séquentielles en quelque chose d’autre, tel que draft
. Par défaut, WP_Query
interroge uniquement les articles publish
ed pour tous les utilisateurs et les articles extra private
pour les utilisateurs connectés. Donc, si vous changez le statut des publications, ces publications seront exclues
Une autre méthode moins intrusive consiste à exécuter deux requêtes. Le premier, qui sera très basique et allégé, renverra l'ID de l'article seulement des 100 premiers articles. Cet identifiant sera transmis à la deuxième requête qui obtiendra 10 messages par page et ne comportera que 10 pages, car nous ne lui transmettons que 100 identifiants. L'avantage ici est que si vous entrez manuellement la page 11, vous obtiendrez une page 404.
Comme je l'ai dit, le point 3 est la meilleure option ici. Nous utiliserons get_posts
pour la première requête car elle coupe la pagination, ce qui accélère votre requête, et nous obtiendrons uniquement l'ID de publication qui rend la requête complète 99,9% plus rapide que la normale. Dans l'ensemble, l'impact sur la page est presque nul. Pour notre deuxième requête, nous utiliserons WP_Query
et le paramètre post__in
pour obtenir notre liste de publications paginée.
( Ce code n'a pas été testé et nécessite PHP 5.4+ )
$args = [
'posts_per_page' => 100,
'fields' => 'ids',
// Add additional args here
];
$post_ids = get_posts( $args );
if ( $post_ids ) {
$args_2 = [
'paged' => $paged,
'post__in' => $post_ids,
'posts_per_page' => 10,
];
$q = new WP_Query( $args_2 );
while ( $q->have_posts() ) {
$q->the_post();
// YOUR LOOP
}
next_posts_link( 'Next Posts', $q->max_num_pages );
previous_posts_link( 'Previous Posts' );
wp_reset_postdata();
}
Peut-être que ça aide
function wpcodex_filter_main_search_post_limits( $limit, $query ) {
return 'LIMIT 0, 100';
}
add_filter( 'post_limits', 'wpcodex_filter_main_search_post_limits', 10, 2 );
Plus: post_limits
filter
Essayez ce code qui vous aidera à n’afficher que 10 pages.
C'est le code où vous voulez afficher le message:
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array( 'post_type' => 'property', 'posts_per_page' => 10,'paged'=> $paged,'orderby'=> 'meta_value_num','order'=> 'DESC');
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
print_r($post); ?>
<h1> <?php the_post_thumbnail(); ?></h1>
<h2><?php the_title(); ?></h2>
<h3><?php the_content(); ?></h3>
<?php endwhile; ?>
C'est le pied de page où vous devez afficher la pagination.
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>
<?php if($loop->max_num_pages > 1 && $loop->max_num_pages < 11 ) { ?>
<ul class="pager">
<?php for($i=1;$i<=$loop->max_num_pages; $i++){ ?>
<li><a href="<?php get_permalink();?>page/<?php echo $i; ?>"> <?php echo $i; ?></a></li>
<?php } ?>
</ul>
<?php } else if($loop->max_num_pages > 1 && $loop->max_num_pages > 10) { ?>
<ul class="pager">
<?php for($i=1;$i<=10; $i++){ ?>
<li><a href="<?php get_permalink();?>page/<?php echo $i; ?>"> <?php echo $i; ?></a></li>
<?php } ?>
</ul>
<?php } else{ ?>
<?php } ?>