Come limitare get_posts()?
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.
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.

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

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

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
.

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

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.

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
.

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.

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

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.

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.

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.

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

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.

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

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.

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).

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.
