Cum se limitează get_posts()?
Am cercetat acest aspect în ultimele 3 zile. Încerc să limitez numărul maxim de articole returnate de get_posts().
Am următorul fragment de cod:
// toate filtrele ar trebui aplicate aici
$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);
//
Parametrul limit nu funcționează.
ACTUALIZARE #1: Vreau să folosesc, să zicem, 5 articole pe pagină și să folosesc interogări multiple pe aceeași pagină folosind get_posts() (nu query_posts, nu WP_Query) și vreau să limitez interogarea bazei de date la 100. Nu pot folosi parametrul paged, din cauza buclelor create dinamic multiple.
Puteți utiliza posts_per_page sau numberposts.
http://codex.wordpress.org/Template_Tags/get_posts#Parametrii
EDIT: Referitor la modificarea ta. Nu poți avea posts_per_page diferit de LIMIT în interogarea SQL. get_posts() creează o instanță a WP_Query și o returnează utilizând posts_per_page ca LIMIT.
posts_per_page nu limitează efectiv interogarea get_posts(). De asemenea, numberposts nu funcționează.
Ciprian
Atunci de ce spui în comentariul tău că ai folosit posts_per_page? Dacă faci paginare, setezi parametrul paged la numărul paginii și posts_per_page va limita numărul de înregistrări. Nu există parametru limit în WP_Query
Jonathan
Soluția mea nu este una adevărată WordPress. Afișez 100 de articole și folosesc o tehnică de paginare jQuery. Deci întrebarea nu este încă răspunsă. Am nevoie de o soluție posts_per_page combinată cu un parametru limit. Am nevoie doar ca get_posts() să recupereze 100 de articole, ca să le pot pagina, nu știu, câte 5 sau 10 pe pagină. Nu există nicio modalitate de a limita interogarea get_posts(), fără a folosi parametrul posts_per_page.
Ciprian
De asemenea, nu pot folosi parametrul paged, deoarece folosesc mai multe interogări pe aceeași pagină.
Ciprian
Ai putea folosi offset împreună cu posts_per_page pentru a ocoli faptul că nu poți folosi paged, sau, având mai multe interogări pe pagină, probabil ar fi mai bine să creezi un nou obiect WP_Query pentru interogările secundare.
Jonathan
Interogările sunt create dinamic, deci nu există una principală sau secundară. Nu vreau să folosesc offset, vreau să folosesc get_posts() cu posts_per_page setat la 99999 și să limitez interogarea bazei de date la 100.
Ciprian
Nu există nicio modalitate de a avea posts_per_page = 99999 și interogarea bazei de date la 100, deoarece posts_per_page este ceea ce stabilește limita în interogare. Nu văd niciun motiv pentru a face acest lucru, poate actualizați întrebarea dvs. cu mai multe detalii despre ce doriți să obțineți.
Jonathan
Am actualizat întrebarea mea. Am nevoie de un parametru limit pentru a-l transmite interogării SQL LIMIT.
Ciprian
Parametrul posts_per_page este cel care stabilește de fapt LIMIT în SQL. Deci, nu are nicio logică, posts_per_page și LIMIT-ul SQL sunt exact același lucru. Nu le poți separa.
Otto
Mulțumesc @Otto. De obicei folosesc posts_per_page pentru a defini numărul de articole pe pagină care să fie afișate. Deci am 10 pagini, cu câte 5 articole pe pagină, adică un total de 50 de articole. Nu pot seta posts_per_page la 50 în acest caz, corect? Trebuie să-l setez la 5.
Ciprian
Parametrul "limit" nu funcționează deoarece nu există un astfel de parametru în funcția get_posts sau în orice altă interogare din WordPress.
Puteți utiliza posts_per_page pentru a seta numărul de articole de preluat și offset pentru a sări peste un anumit număr de articole. Aceștia sunt singurii parametri pe care îi puteți utiliza, iar împreună, ei modifică clauza LIMIT din interogarea SQL care este executată.
Poți să-mi dai un exemplu de interogare get_posts() pentru 100 postări și 5 postări pe pagină?
Ciprian
Aici confuzi două lucruri diferite. Numărul "100" nu are nicio legătură. Ai 100 de postări. Vrei să afișezi cinci dintre ele. Setezi posts_per_page la 5. Punct final. Câte postări sau pagini ai în total nu face nicio diferență.
Otto
Dar dacă am 10000 de postări? Cum limitez interogarea? Nu există vreun parametru, hook sau filtru pentru a modifica interogarea?
Ciprian
Există multe modalități de a modifica interogarea, dar ideea mea este că nu extragi 10.000 de postări, ci le extragi doar câte 5 odată. Deci singura valoare care contează este "5". Câte postări există este irelevant, nu obții toate postările într-o singură interogare.
Otto
Aveți următorul parametru activat care blochează paginarea, astfel orice limitare își pierde sensul:
'nopaging' => true
Schimbați-l pe "disabled" sau ștergeți-l. Apropo, funcția get_posts() limitează implicit postările la 5 în ultima versiune de WordPress. Sau puteți utiliza atributul posts_per_page pentru a seta direct limita sau faceți acest lucru din panoul de administrare (Setări-> Citire).
Am rezolvat această problemă, am folosit parametrul posts_per_page cu valoarea 100 și am utilizat jPages pentru paginare în jQuery.
Explicație: Deoarece aveam nevoie să preiau un număr limitat de articole - în cazul meu, 210 - am vrut să folosesc atât paginarea, cât și o limită în interogare. Deoarece acest lucru pare imposibil folosind get_posts(), am utilizat parametrul posts_per_page cu valoarea 210 și am implementat o paginare jPages. Nu este cea mai elegantă soluție, dar își face treaba.