posts_per_page senza limite

11 dic 2011, 17:50:13
Visualizzazioni: 269K
Voti: 56

Voglio restituire TUTTI i post con query_posts. Ho provato a impostare posts_per_page a un numero molto alto, ma query_posts impazzisce e non restituisce alcun post. Qual è il modo corretto per eseguire query sui post senza un limite?

$args = array(
    'post_type'      => 'post',
    'cat'            => '22,47,67',
    'orderby'        => 'name',
    'order'          => 'ASC',
    'hide_empty'     => 1,
    'depth'          => 1,
    'posts_per_page' => ?
    );
5
Commenti

Ho cercato su Google per un po' e ho esaminato il codex di WP, ma non riesco a trovare una risposta diretta a questa semplice domanda. Credo che la mia domanda sia formulata in modo chiaro con codice di esempio, e ho mostrato anche il mio tentativo (impostando un valore alto per l'argomento). Non sono un esperto di WP, ecco perché sono venuto qui a fare la domanda. Anche fornire risposte a domande che sembrano banali per voi è utile per far crescere queste comunità di Stack Exchange. Personalmente adoro vedere un link a Stack Overflow nei risultati di ricerca, rispetto a un link a un forum scadente.

Banjer Banjer
11 dic 2011 19:50:05

Inoltre, grazie per la risposta. Dovresti pubblicarla come risposta e non come commento, così posso accettarla.

Banjer Banjer
11 dic 2011 19:51:24

Ho capito il tuo punto e apprezzo il tuo impegno nello scrivere la domanda. Sono anche d'accordo che le domande dei non esperti possono rivelarsi preziose in questa comunità. D'altra parte, troppe domande di questo tipo possono scoraggiare alcuni esperti dal partecipare qui. Si tratta di trovare una sorta di equilibrio, credo. In ogni caso, sono un grande sostenitore dei voti positivi, quindi attendo con ansia le tue prossime domande :) Ti auguro una buona permanenza qui su WPSE.

Michal Mau Michal Mau
11 dic 2011 20:15:32

PS: vuoi anche sostituire type con post_type (oppure rimuovere completamente questa riga). Modificherò sia la risposta di Rutwick che la tua domanda per evitare che qualcuno copi e incolli questo piccolo errore.

Michal Mau Michal Mau
11 dic 2011 20:20:34

@Maugly Grazie per la correzione... ero concentrato su posts_per_page quindi ho copiato il refuso! ;)

Rutwick Gangurde Rutwick Gangurde
11 dic 2011 21:06:07
Tutte le risposte alla domanda 6
4
113

-1 è la tua risposta! Cerca posts_per_page qui.

$args = array(
'post_type'      => 'post',
'cat'            => '22,47,67',
'orderby'        => 'name',
'order'          => 'ASC',
'hide_empty'     => 1,
'depth'          => 1,
'posts_per_page' => -1
);

Importante avvertenza: Questo può risultare in una query molto pesante che può mandare in crash il sito. Fallo solo se sei sicuro che il tuo database possa gestirlo. Non usarlo in temi o plugin pubblici.

11 dic 2011 19:48:59
Commenti

Avvertenza importante: Questo può risultare in una query molto grande che può mandare in crash il sito. Fallo solo se sei sicuro che il tuo database possa gestirla. Non usarlo in temi o plugin pubblici.

fuxia fuxia
11 ago 2016 20:25:08

@toscho Aggiungo il tuo commento come aggiornamento alla risposta.

Rutwick Gangurde Rutwick Gangurde
23 nov 2016 08:25:37

mi hai salvato la vita!!

Darlan Dieterich Darlan Dieterich
11 ott 2019 05:14:14

@DarlanDieterich Felice di essere stato utile! :)

Rutwick Gangurde Rutwick Gangurde
14 ott 2019 10:19:49
0
33

Oppure, in alternativa, puoi passare a WP_Query (che è ciò che query_posts utilizza) l'argomento nopaging, che fondamentalmente fa la stessa cosa..

$args = array(
    'nopaging' => true
    // I tuoi altri argomenti, ecc..
);

Otterrà esattamente lo stesso risultato, ma se in futuro dovrai rivedere il codice e non ricordi cosa stavi facendo, personalmente ritengo che sarà più chiaro per te capire quale fosse l'intenzione con quel parametro all'interno dell'array args.

Come ho menzionato, tuttavia, entrambi i metodi ottengono lo stesso risultato.

Non fa mai male avere più di un approccio, ed è sempre bello condividere ciò che sai; questo è il motivo della mia risposta, nonostante tu ne abbia già una sufficiente.. ;)

12 dic 2011 19:16:58
0

Dal file functions del tuo tema figlio:

add_action( 'pre_get_posts', 'wpsites_no_limit_posts' );

function wpsites_no_limit_posts( $query ) {

if( $query->is_main_query() && !is_admin() && is_home() ) {

$query->set( 'posts_per_page', '-1' ); // Imposta per visualizzare tutti i post senza limite
$query->set( 'order', 'ASC' ); // Imposta l'ordinamento crescente
$query->set( 'post_type', 'post' ); // Imposta il tipo di contenuto a 'post'
$query->set( 'cat', '22,47,67' ); // Filtra per le categorie con ID 22, 47 e 67
$query->set( 'orderby', 'name' ); // Ordina per nome
$query->set( 'order', 'ASC' ); // Imposta nuovamente l'ordinamento crescente
$query->set( 'hide_empty', '1' ); // Nascondi le categorie vuote
$query->set( 'depth', '1' ); // Imposta la profondità a 1

    }

}
23 feb 2014 05:19:11
1

Usando Ricardo's con alcune modifiche:

static $paged;
$post_ids = [];
do {
    $paged++;
    $defaults = [
        'fields' => 'ids', // Restituisce solo il campo ID per rendere la query più veloce.
        'post_type' => 'post',
        'posts_per_page' => 100,
        'no_found_rows' => false, // Abbiamo bisogno della paginazione e del conteggio di tutti i post trovati.
        'paged' => $paged,
        'update_post_term_cache' => false,
        'update_post_meta_cache' => false,
    ];
    $query = new WP_Query($defaults);
    if ($query->have_posts()) {
        foreach ($query->posts as $id) {
            $post_ids[] = $id;
        }
    }
} while ($query->max_num_pages > $paged);

return $post_ids;

Questo aumenterà drasticamente la velocità della query interrogando solo la colonna ID ed evitando di aggiornare la cache dei termini e dei meta.

18 ott 2019 00:18:06
Commenti

Bello! grazie per la condivisione.

Ricardo Canelas Ricardo Canelas
19 ott 2019 01:25:29
1

La risposta corretta per il tuo problema è 'posts_per_page' => -1 perché -1 restituirà un numero illimitato di post per pagina come hanno risposto gli altri utenti.

Voglio solo aggiungere un'informazione a questa domanda e risposta,

Se vuoi ottenere il numero di post per pagina dalle impostazioni di lettura nel Pannello di Amministrazione di WordPress, devi chiamare la funzione get_option() e passarle posts_per_page come stringa.

$args = array(
    'post_type'      => 'post',
    'cat'            => '22,47,67',
    'orderby'        => 'name',
    'order'          => 'ASC',
    'hide_empty'     => 1,
    'depth'          => 1,
    'posts_per_page' => get_option('posts_per_page')
    );

Spero che questa risposta aiuterà qualcuno come ha aiutato me. Buona Programmazione Utenti di Stackexchange

11 ago 2016 19:29:45
Commenti

È effettivamente un'ottima aggiunta!

Herbert Van-Vliet Herbert Van-Vliet
29 dic 2017 02:59:12
1

Oppure..

function getAll($arg, $posts_per_page = 50)
{
    $data = array();
    $page = 1;

    do{
        $arg['paged'] = $page;
        $arg['posts_per_page'] = $posts_per_page;

        $query = new WP_Query($arg);

        foreach ($query->posts as $post){
            $data[] = $post;
        }

        $page++;

    }while(count($query->posts) === $posts_per_page);

    return $data;
}
22 feb 2017 12:43:43
Commenti

Dovresti aggiungere un contesto per spiegare il tuo codice, la tua idea per risolvere la domanda.

bueltge bueltge
22 feb 2017 14:25:02