it-swarm.com.de

Beschränken Sie die Anzahl der Seiten in Seitenumbrüchen

Ich habe mehr als 500 Beiträge und ich möchte nur 100 Beiträge mit Paginierung begrenzen. Also 10 Seiten mit jeweils 10 Beiträgen. Ihnen den Code präsentieren:

$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();
}
1
Hussain Ansari

Bevor ich anfange, benutze get_posts nicht für paginierte Abfragen. get_posts unterbricht die Paginierung legal und gibt das Abfrageobjekt nicht zurück. Wenn Sie Abfragen paginieren müssen, verwenden Sie WP_Query

Ich glaube nicht, dass es möglich ist, die Gesamtzahl der Beiträge auf 100 zu beschränken, wenn Sie mit Paginierung arbeiten. Die einzigen Szenarien, an die ich denken kann, sind:

  • Entfernen Sie die Seitenverknüpfungen auf Seite 10, aber Sie können auch hier manuell Seite 11 aufrufen und die Beiträge von Seite 11 anzeigen

  • Führen Sie eine benutzerdefinierte Funktion aus, wenn ein neuer Beitrag veröffentlicht wird, um den Beitragsstatus des 101. Beitrags und der sequenziellen Beiträge in etwas anderes zu ändern, z. B. draftname__. Standardmäßig fragt WP_Query nur publishname__ed Posts für alle Benutzer und zusätzliche privatePosts für angemeldete Benutzer ab. Wenn Sie also den Post-Status ändern, werden diese Posts ausgeschlossen

  • Eine andere, weniger aufdringliche Methode besteht darin, zwei Abfragen auszuführen. Der erste, der sehr einfach und schlank sein wird, gibt die only der ersten 100 Posts zurück. Diese IDs werden an die zweite Abfrage übergeben, die 10 Posts pro Seite erhält und nur 10 Seiten hat, da wir nur 100 IDs an sie übergeben. Der Vorteil hierbei ist, dass Sie bei manueller Eingabe von Seite 11 eine 404-Seite erhalten.

PUNKTBEISPIEL 3

Wie gesagt, Punkt 3 ist hier die beste Option. get_posts wird für die erste Abfrage verwendet, da die Paginierung aufgehoben wird, wodurch Ihre Abfrage beschleunigt wird. Außerdem werden nur die Post-IDs angezeigt, mit denen die vollständige Abfrage 99,9% schneller als normal ist. Insgesamt ist die Auswirkung auf die Seite nahezu null. Bei unserer zweiten Abfrage verwenden wir WP_Query und den Parameter post__in, um die Liste der Beiträge abzurufen

( Dieser Code ist nicht getestet und erfordert 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();
}
3
Pieter Goosen

Vielleicht hilft es

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 );

Mehr: post_limits filter

4
Trang

Probieren Sie diesen Code aus, mit dem Sie nur 10 Seiten anzeigen können.

Dies ist der Code, in dem Sie den Beitrag anzeigen möchten:

<?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; ?>

In dieser Fußzeile müssen Sie die Paginierung anzeigen.

<?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 } ?>
0
Anand