Impostazione del numero di articoli per pagina non funziona? - Risoluzione

16 gen 2012, 17:08:30
Visualizzazioni: 18.7K
Voti: 3

OK, ecco il mio problema. Ho una homepage statica e una pagina separata per gli articoli nel mio sito WordPress. Ho definito entrambe nel pannello di amministrazione. Ho impostato il numero massimo di articoli da visualizzare a 5 (in Impostazioni > Lettura), ma tutti gli articoli (10+) vengono comunque mostrati nella pagina del blog.

Sto anche visualizzando gli ultimi 3 articoli nella homepage statica usando una query personalizzata. Esempio:

$wp_query = new WP_Query( array( 'posts_per_page' => 3));

<codice del loop dei risultati>

Ma anche questa lista mostra più di 3 articoli. Sembra che WordPress stia ignorando il limite posts_per_page che ho impostato, sia nel pannello admin che nel codice. Cosa sta succedendo? È la prima volta che uso WordPress per sviluppare un sito. È un problema comune per i principianti?

MODIFICA:

Ho semplificato la homepage statica lasciando solo un blocco di codice base che recupera i titoli degli articoli. Vengono ancora restituiti più di 3 articoli. Ecco il codice attuale (e unico) presente nella homepage:

<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
Commenti

In base al codice che hai incluso, hai fatto tutto correttamente, potresti mostrare un po' più del codice per aiutare a trovare dove si trova l'errore?

mor7ifer mor7ifer
16 gen 2012 17:15:35

questo non ha necessariamente a che fare con il tuo problema, ma dovresti usare una variabile diversa da $wp_query per le tue query personalizzate, è la variabile globale che WordPress utilizza per il loop principale, e potresti ottenere risultati imprevedibili usandola per altri scopi.

Milo Milo
16 gen 2012 19:10:07
Tutte le risposte alla domanda 4
0

Volevo aggiungere il mio caso a questa lista perché ci ho messo tantissimo tempo a debuggarlo. Il problema è che ho modificato il numero di post visualizzati in una pagina archivio utilizzando l'hook pre_get_post:

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

Per risolvere il problema in cui includeva la query per un tipo di post completamente diverso, ho aggiunto qualcosa come questo all'istruzione if:

if( (is_post_type_archive(array('post_type1', 'post_type2'))) && ($query->get('post_type') !== 'post') )
{
    ....
}

Il motivo per cui lo posto qui è che questo è il primo risultato che è apparso nella ricerca Google relativa alla mia ricerca. Quindi potrebbe aiutare qualcuno che non riesce a capire per un'ora... o due perché la query proprio non vuole ascoltarti.

3 set 2014 22:52:05
1

Ciò potrebbe essere causato da un tema o un plugin che sovrascrive le impostazioni di WordPress. Potresti provare ad attivare il tema TwentyEleven o TwentyTen, oltre a disabilitare qualsiasi plugin, per verificare se funziona in quel caso.

Se così fosse, potresti indicare quale tema stai utilizzando (se è predefinito) o quali plugin hai dovuto disabilitare per farlo funzionare - e possiamo vedere cosa si può fare per rimediare.

16 gen 2012 18:58:57
Commenti

Grazie. Ho disabilitato lo stupido tema e ha funzionato! L'ho preso da devpress.com (tema news). Viene pubblicizzato come un tema genitore "avanzato" e agli utenti viene detto di non "toccare" nulla. Immagino che con "avanzato" intendessero mal codificato, dato che tutto quello che ho fatto è stato aggiungere il codice per recuperare i post dopo il loro slideshow sofisticato.

JCoder JCoder
16 gen 2012 20:33:46
1
//aggiungi questo codice prima di chiamare il tuo e personalizzalo come preferisci
function hwl_home_pagesize( $query ) {
if ( is_admin() || ! $query->is_main_query() )
    return;

if ( is_home() ) {
    // Mostra solo 1 articolo per l'archivio blog originale
    $query->set( 'posts_per_page', 1 );
    return;
}

if ( is_post_type_archive( 'movie' ) ) {
    // Mostra 50 articoli per un custom post type chiamato 'movie'
    $query->set( 'posts_per_page', 50 );
    return;
  }
}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );
14 lug 2013 12:18:13
Commenti

Aggiungi una spiegazione alla tua risposta: perché potrebbe risolvere il problema?

fuxia fuxia
4 feb 2014 00:50:20
0

N.Schipper ha ragione. Ma l'unica condizione non è sufficiente senza la condizione

! is_admin()

In questo modo il numero di post per pagina verrà modificato solo nei cicli necessari e non influenzerà l'area di amministrazione.

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 dic 2017 18:07:57