Cum se limitează get_posts()?

24 sept. 2014, 15:36:50
Vizualizări: 39K
Voturi: 2

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.

0
Toate răspunsurile la întrebare 5
11

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.

24 sept. 2014 16:02:07
Comentarii

posts_per_page nu limitează efectiv interogarea get_posts(). De asemenea, numberposts nu funcționează.

Ciprian Ciprian
24 sept. 2014 16:05:07

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 Jonathan
24 sept. 2014 16:09:24

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 Ciprian
24 sept. 2014 16:13:12

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

Ciprian Ciprian
24 sept. 2014 16:13:43

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 Jonathan
24 sept. 2014 16:17:10

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 Ciprian
24 sept. 2014 16:23:09

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 Jonathan
24 sept. 2014 16:30:26

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

Ciprian Ciprian
24 sept. 2014 17:04:02

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 Otto
24 sept. 2014 17:25:33

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 Ciprian
24 sept. 2014 17:29:43

Da, l-ai seta la 5, pentru că vrei să obții 5 articole, nu 50. Numele variabilei este sugestiv: articole pe pagină.

Otto Otto
24 sept. 2014 17:30:53
Arată celelalte 6 comentarii
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ă.

24 sept. 2014 17:28:44
Comentarii

Poți să-mi dai un exemplu de interogare get_posts() pentru 100 postări și 5 postări pe pagină?

Ciprian Ciprian
24 sept. 2014 17:30:57

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 Otto
24 sept. 2014 17:33:18

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

Ciprian Ciprian
24 sept. 2014 17:46:08

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 Otto
24 sept. 2014 21:47:20

Mulțumesc Otto, am rezolvat problema folosind o abordare diferită. Vezi răspunsul meu actualizat.

Ciprian Ciprian
25 sept. 2014 11:23:19
1

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

24 oct. 2017 13:46:06
Comentarii

Acest lucru l-a rezolvat pentru mine.

newpoison newpoison
24 mar. 2021 21:01:34
0

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.

24 sept. 2014 16:03:51
1
-4

Puteți folosi hook-ul pre_get_post pentru a obține numărul de articole pe care doriți să le afișați:

add_action( 'pre_get_posts', 'numele_functiei_dvs' );
25 sept. 2014 12:47:11
Comentarii

Și cum ar folosi OP acel hook?

kaiser kaiser
25 sept. 2014 13:37:14