it-swarm.com.de

Archivseite ... Beiträge pro Seite begrenzen

Ich habe also einen benutzerdefinierten Beitragstyp "testimonials" erstellt und die Option "has archive" auf "true" gesetzt und eine PHP -Vorlagendatei mit dem Namen "archive-testimonials.php" erstellt.

Was ich nicht tun möchte, ist die Anzahl der angezeigten Posts auf nur 5 zu begrenzen, mit der Option "Weiter und Zurück", um vorwärts und rückwärts zu den nächsten 5 zu wechseln. Klingt einfach genug, aber aus irgendeinem Grund kann ich es nicht zum Laufen bringen.

Hier ist meine Schleife, die mir alle 17 Testimonials zeigt:

<?php $loop = new WP_Query( array( 'pagename' => 'testimonials', 'posts_per_page' => -1 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div>
    <h2><?php the_title(); ?></h2>
    <?php the_content(); ?>
   </div>
 <?php endwhile; ?>

Die einzige Möglichkeit, alle statt nur 10 anzuzeigen, ist mit 'posts_per_page' => -1. Und auch ohne "posts_per_page" werden nur 10 der 17 Posts angezeigt.

Jetzt habe ich versucht:

<?php $loop = new WP_Query( array( 'post_type' => 'testimonials', 'posts_per_page' => 5 ) ); ?>
<?php previous_posts_link(); ?> &bull; <?php next_posts_link(); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div>
    <h2><?php the_title(); ?></h2>
     <?php the_content(); ?>
  </div>
<?php endwhile; ?>

Ich kann nur fünf davon anzeigen, aber ich habe keine Paginierung für die nächsten fünf. Ich öffne nur "testimonials/page/2 /" und zeige die gleichen fünf wie auf der vorherigen Seite.

Was mache ich falsch. Jede Hilfe wird sehr geschätzt.

Vielen Dank

1
agon024

Erstellen Sie keine neue Abfrage und Schleife, um nur Beiträge pro Seite zu ändern. Fügen Sie eine Funktion hinzu, die mit pre_get_posts verknüpft ist, und ändern Sie die gewünschten Parameter, bevor die Abfrage ausgeführt wird. Dies würde in die functions.php Datei deines Themas oder in ein Plugin gehen.

function wpd_testimonials_query( $query ){
    if( ! is_admin()
        && $query->is_post_type_archive( 'testimonials' )
        && $query->is_main_query() ){
            $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'wpd_testimonials_query' );

Dann führen Sie in der Vorlage die normale Schleife aus und die Paginierung funktioniert wie erwartet.

8
Milo