Come limitare get_posts()?

24 set 2014, 15:36:50
Visualizzazioni: 39K
Voti: 2

Ho fatto ricerche su questo per gli ultimi 3 giorni. Sto cercando di limitare il numero massimo di post recuperati da get_posts().

Ho questo pezzo di codice:

// tutti i filtri dovrebbero essere applicati qui
$args = array(
    'nopaging'                  => true,
    'post_type'                 => get_option('ip_slug'),
    'posts_per_page'            => $ip_ipp,
    'limit'                     => 100,
    'orderby'                   => $ip_order,
    'order'                     => $ip_order_asc_desc,
    'author'                    => $author,
    'suppress_filters'          => false,

    'meta_key' => $ip_meta,
    'meta_query' => array(
        array(
            'key' => $ip_key,
        )
    ),
    'cache_results' => false,
    'update_post_term_cache' => false,
    'update_post_meta_cache' => false,
    'no_found_rows' => true,
);
$posts = get_posts($args);
//

Il parametro limit non funziona.

AGGIORNAMENTO #1: Voglio utilizzare, diciamo, 5 post per pagina e usare query multiple sulla stessa pagina utilizzando get_posts() (non query_posts, non WP_Query) e voglio limitare la query del database a 100. Non posso utilizzare il parametro paged, a causa di loop multipli creati dinamicamente.

0
Tutte le risposte alla domanda 5
11

Puoi utilizzare posts_per_page o numberposts.

http://codex.wordpress.org/Template_Tags/get_posts#Parameters

MODIFICA: Riguardo alla tua modifica. Non puoi avere posts_per_page diverso dal LIMIT nella query SQL. get_posts() crea un'istanza di WP_Query e la restituisce utilizzando posts_per_page come LIMIT.

24 set 2014 16:02:07
Commenti

posts_per_page non limita effettivamente la query get_posts(). Inoltre, numberposts non funziona.

Ciprian Ciprian
24 set 2014 16:05:07

Allora perché nel tuo commento dici che hai usato posts_per_page? Se stai implementando la paginazione, devi impostare il parametro paged con il numero di pagina e posts_per_page limiterà il numero di record. Non esiste un parametro limit in WP_Query

Jonathan Jonathan
24 set 2014 16:09:24

La mia soluzione non è propriamente WordPress. Visualizzo 100 post e utilizzo una tecnica di paginazione jQuery. Quindi la domanda non ha ancora risposta. Ho bisogno di una soluzione con posts_per_page combinata con un parametro limit. Mi serve che get_posts() recuperi solo 100 post, così posso paginarli, ad esempio 5 o 10 per pagina. Non c'è modo di limitare la query get_posts() senza usare il parametro posts_per_page.

Ciprian Ciprian
24 set 2014 16:13:12

Inoltre, non posso usare il parametro paged, poiché sto utilizzando multiple query sulla stessa pagina.

Ciprian Ciprian
24 set 2014 16:13:43

Potresti usare offset insieme a posts_per_page per aggirare l'impossibilità di usare paged, oppure dato che hai multiple query nella pagina, probabilmente sarebbe meglio creare un nuovo oggetto WP_Query per le query secondarie.

Jonathan Jonathan
24 set 2014 16:17:10

Le query vengono create dinamicamente, quindi non c'è una primaria o secondaria. Non voglio usare offset, voglio usare get_posts() con posts_per_page impostato a 99999 e limitare la query al database a 100.

Ciprian Ciprian
24 set 2014 16:23:09

Non c'è modo di avere posts_per_page = 99999 e la query al database a 100 perché posts_per_page è ciò che imposta il limite nella query. Non riesco a vedere un motivo per farlo, forse aggiorna la tua domanda con maggiori dettagli su ciò che vuoi ottenere.

Jonathan Jonathan
24 set 2014 16:30:26

Ho aggiornato la mia domanda. Ho bisogno di un parametro limit da passare alla query SQL LIMIT.

Ciprian Ciprian
24 set 2014 17:04:02

posts_per_page è ciò che effettivamente imposta il LIMIT nell'SQL. Quindi, quello che dici non ha molto senso, posts_per_page e il LIMIT SQL sono esattamente la stessa cosa. Non puoi separarli.

Otto Otto
24 set 2014 17:25:33

Grazie @Otto. Di solito uso posts_per_page per definire il numero di articoli da visualizzare per pagina. Quindi ho 10 pagine, con 5 articoli per pagina, per un totale di 50 articoli. In questo caso non posso impostare posts_per_page a 50, corretto? Devo impostarlo a 5.

Ciprian Ciprian
24 set 2014 17:29:43

Sì, dovresti impostarlo a 5, perché vuoi ottenere 5 articoli, non 50. Il nome della variabile è autoesplicativo: articoli per pagina.

Otto Otto
24 set 2014 17:30:53
Mostra i restanti 6 commenti
5

Il parametro "limit" non funziona perché non esiste un tale parametro in get_posts o in qualsiasi altra query in WordPress.

Puoi utilizzare posts_per_page per impostare il numero di articoli da recuperare e offset per saltare un certo numero di articoli. Questi sono gli unici parametri che puoi utilizzare e insieme modificano il LIMIT risultante nella query SQL che viene eseguita.

24 set 2014 17:28:44
Commenti

Puoi fornirmi un esempio di una query get_posts() per 100 post e 5 post per pagina?

Ciprian Ciprian
24 set 2014 17:30:57

Stai confondendo due cose diverse qui. Il numero "100" non c'entra affatto. Hai 100 post. Vuoi mostrarne cinque. Imposti posts_per_page a 5. Fine della storia. Quanti post o pagine hai in totale non fa alcuna differenza.

Otto Otto
24 set 2014 17:33:18

E se ho 10000 post? Come posso limitare la query? Non esiste un parametro, un hook o un filtro per modificare la query?

Ciprian Ciprian
24 set 2014 17:46:08

Ci sono molti modi per modificare la query, ma il punto è che non stai estraendo 10000 post, li stai estraendo solo 5 alla volta. Quindi l'unico valore che ti interessa è "5". Quanti post ci siano in totale è irrilevante, non stai ottenendo tutti i post in una singola query.

Otto Otto
24 set 2014 21:47:20

Grazie Otto, ho risolto il problema utilizzando un approccio diverso. Vedi la mia risposta aggiornata.

Ciprian Ciprian
25 set 2014 11:23:19
1

Hai abilitato il seguente parametro che blocca la paginazione, quindi qualsiasi limitazione perde senso:

'nopaging' => true

Disabilitalo o eliminalo. Tra l'altro, la funzione get_posts() limita i post a 5 per impostazione predefinita nell'ultima versione di WP. Oppure puoi usare l'attributo posts_per_page per impostare direttamente il limite o farlo dal pannello di amministrazione (Impostazioni->Lettura).

24 ott 2017 13:46:06
Commenti

Questo è ciò che ha risolto il problema per me.

newpoison newpoison
24 mar 2021 21:01:34
0

Ho risolto questo problema, ho utilizzato il parametro posts_per_page con un valore di 100 e ho usato jPages per la paginazione jQuery.

Spiegazione: Dato che avevo bisogno di recuperare un numero limitato di post - nel mio caso, 210 - volevo utilizzare sia la paginazione che un limite nella query. Poiché questo sembra impossibile usando get_posts(), ho utilizzato il parametro posts_per_page con un valore di 210 e ho implementato una paginazione con jPages. Non è la soluzione più elegante, ma funziona.

24 set 2014 16:03:51
1
-4

Puoi utilizzare l'hook pre_get_post per ottenere il numero di post che desideri visualizzare:

add_action( 'pre_get_posts', 'your_function_name' );
25 set 2014 12:47:11
Commenti

E come l'OP dovrebbe utilizzare quell'hook?

kaiser kaiser
25 set 2014 13:37:14