Setările pentru numărul de articole pe pagină nu funcționează în WordPress?

16 ian. 2012, 17:08:30
Vizualizări: 18.7K
Voturi: 3

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>
2
Comentarii

Pe baza codului pe care l-ai inclus, ai făcut totul corect, poți arăta mai mult din cod pentru a ajuta la identificarea erorii?

mor7ifer mor7ifer
16 ian. 2012 17:15:35

acest lucru nu are neapărat legătură cu problema ta, dar ar trebui să folosești o altă variabilă decât $wp_query pentru interogările tale personalizate, aceasta este variabila globală pe care WordPress o folosește pentru bucla principală și poți obține rezultate imprevizibile dacă o folosești în alte scopuri.

Milo Milo
16 ian. 2012 19:10:07
Toate răspunsurile la întrebare 4
0

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.

3 sept. 2014 22:52:05
1

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.

16 ian. 2012 18:58:57
Comentarii

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.

JCoder JCoder
16 ian. 2012 20:33:46
1
//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 );
14 iul. 2013 12:18:13
Comentarii

Te rog să adaugi o explicație la răspunsul tău: de ce ar putea rezolva această soluție problema?

fuxia fuxia
4 feb. 2014 00:50:20
0

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;
}
}
9 dec. 2017 18:07:57