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.
Ciprian
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
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
Inoltre, non posso usare il parametro paged, poiché sto utilizzando multiple query sulla stessa pagina.
Ciprian
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
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
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
Ho aggiornato la mia domanda. Ho bisogno di un parametro limit da passare alla query SQL LIMIT.
Ciprian
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
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
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?
Ciprian
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
E se ho 10000 post? Come posso limitare la query? Non esiste un parametro, un hook o un filtro per modificare la query?
Ciprian
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
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.