Setările pentru numărul de articole pe pagină nu funcționează în WordPress?
OK, iată problema mea. Am o pagină principală statică și o pagină separată pentru articole pe site-ul meu WordPress. Le-am definit pe ambele în panoul de administrare. Acum, am setat numărul maxim de articole afișate la 5 (în Setări> Citire), dar toate articolele (10+) sunt în continuare afișate pe pagina de blog.
De asemenea, afișez ultimele 3 articole pe pagina principală statică folosind o interogare personalizată. Adică:
$wp_query = new WP_Query( array( 'posts_per_page' =>3));
<codul buclei de rezultate>
Dar și această listă afișează mai mult de 3 articole. Se pare că WordPress ignoră limita posts_per_page pe care o setez, fie din panoul de administrare, fie prin cod. Ce naiba se întâmplă? Aceasta este prima dată când folosesc WordPress pentru a dezvolta un site. Este aceasta o problemă comună pentru începători?
EDIT:
Tocmai am simplificat pagina principală statică și am lăsat doar un bloc de cod de bază care preia doar titlurile articolelor. Se întorc în continuare mai mult de 3 articole. Iată codul actual (și singurul) prezent acum pe pagina principală:
<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>

Am vrut să adaug și cazul meu în această listă, deoarece mi-a luat o eternitate să depanez problema. Ce se întâmpla era că am modificat numărul de postări afișate pe o pagină de arhivă prin conectarea la hook-ul pre_get_posts
:
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;
}
Și pentru a repara problema în care interogarea includea și postări dintr-un tip complet diferit, am adăugat ceva de genul acesta în condiția if
:
if( (is_post_type_archive(array('post_type1', 'post_type2'))) && ($query->get('post_type') !== 'post') )
{
....
}
Motivul pentru care postez acest lucru aici este că acesta este primul rezultat care a apărut în căutarea Google legată de problema pe care o aveam. Poate va ajuta pe cineva care nu reușește să înțeleagă timp de o oră... sau două de ce interogarea pur și simplu nu vrea să asculte de el.

Aceasta poate fi cauzată de o temă sau un plugin care suprascrie setările WordPress. Puteți încerca să activați tema TwentyEleven sau TwentyTen, precum și să dezactivați orice plugin-uri, pentru a vedea dacă funcționează atunci.
Dacă da, puteți menționa ce temă utilizați (dacă este predefinită) sau ce plugin-uri a trebuit să dezactivați pentru a funcționa - și putem vedea ce se poate face pentru a remedia problema.

Mulțumesc. Am dezactivat tema prostească și a funcționat! Am luat-o de la devpress.com (tema news). E promovată ca o temă părinte 'avansată' iar utilizatorii sunt avertizați să nu 'atingă' nimic. Presupun că prin 'avansată' se refereau la cod prost scris, pentru că tot ce am făcut a fost să adaug codul de preluare a postărilor după slideshow-ul lor extravagant.

//adaugă acest cod înainte de a apela codul tău și personalizează-l după preferințe
function hwl_home_pagesize( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( is_home() ) {
// Afișează doar 1 articol pentru arhiva originală a blogului
$query->set( 'posts_per_page', 1 );
return;
}
if ( is_post_type_archive( 'movie' ) ) {
// Afișează 50 de articole pentru un tip de postare personalizat numit 'movie'
$query->set( 'posts_per_page', 50 );
return;
}
}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );

N.Schipper a avut dreptate. Dar singura condiție din enunț nu este suficientă
! is_admin()
Astfel, numărul de articole pe pagină va fi modificat doar în ciclurile necesare și nu va afecta zona de administrare.
if( (! is_admin()) && (is_post_type_archive(array('post_type1', 'post_type2'))) && ($query->get('post_type') !== 'post') )
{
{
$query->set( 'posts_per_page', 6 );
return;
}
}
