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

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

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
.

De asemenea, nu pot folosi parametrul paged
, deoarece folosesc mai multe interogări pe aceeași pagină.

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.

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
.

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.

Am actualizat întrebarea mea. Am nevoie de un parametru limit
pentru a-l transmite interogării SQL LIMIT
.

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.

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.

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ă?

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ță.

Dar dacă am 10000 de postări? Cum limitez interogarea? Nu există vreun parametru, hook sau filtru pentru a modifica interogarea?

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.

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.
