Pagina de arhivă...limitarea articolelor per pagină

17 mar. 2015, 22:31:26
Vizualizări: 20.9K
Voturi: 4

Am creat un tip de postare personalizat 'testimonials' și am setat opțiunea "has archive" pe "true" și am un fișier template PHP numit "archive-testimonials.php".

Ceea ce vreau să fac este să limitez numărul de postări afișate la doar 5 cu opțiuni înainte și înapoi pentru a naviga între următoarele 5 postări. Pare destul de simplu, dar din anumite motive nu reușesc să-l fac să funcționeze.

Aici este bucla mea care îmi arată toate cele 17 postări testimoniale:

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

Singura modalitate prin care va afișa toate postările în loc de doar 10 este cu 'posts_per_page' => -1. Și chiar și fără acel "posts_per_page" va afișa doar 10 din cele 17 postări.

Acum am încercat:

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

Pot să afișez doar cinci, dar nu am paginare pentru următoarele 5. Doar deschide "testimonials/page/2/" și arată aceleași cinci ca și pagina anterioară.

Ce fac greșit? Orice ajutor este foarte apreciat.

Mulțumesc

0
Toate răspunsurile la întrebare 1
1
19

Nu creați o nouă interogare și buclă doar pentru a modifica numărul de postări pe pagină. Adăugați o funcție conectată la pre_get_posts și modificați orice parametri doriți acolo înainte ca interogarea să fie executată. Acest cod ar trebui plasat în fișierul functions.php al temei dumneavoastră sau într-un plugin.

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

Apoi, în șablon, rulați bucla normală și paginarea va funcționa așa cum este de așteptat.

17 mar. 2015 22:54:28
Comentarii

A funcționat perfect. Nu sunt nou în WordPress, dar sunt departe de a fi la nivelul altora. Am avut dificultăți cu asta ieri și nu reușeam să o fac să funcționeze. Dar tocmai am învățat ceva nou... Mulțumesc că m-ai învățat.

agon024 agon024
18 mar. 2015 16:14:52