Afișează toate rezultatele căutării

19 mar. 2012, 13:53:02
Vizualizări: 23.2K
Voturi: 3

Există vreo modalitate de a afișa toate rezultatele căutării în search.php? Momentan afișează doar 10 rezultate (așa cum este setat în WordPress settings > general).

0
Toate răspunsurile la întrebare 3
5

Calea rapidă și murdară de a face acest lucru ar fi să folosești din nou query_posts, dublând numărul de apeluri către baza de date.

<?php if (have_posts()) : ?>
<?php query_posts('showposts=999'); ?>

O soluție mai bună ar fi să adaugi acest cod în functions.php, modificând interogarea inițială înainte ca aceasta să fie executată:

function change_wp_search_size($query) {
    if ( $query->is_search ) // Asigură-te că este o pagină de căutare
        $query->query_vars['posts_per_page'] = 10; // Schimbă 10 cu numărul de articole pe care dorești să le afișezi

    return $query; // Returnează variabilele noastre de interogare modificate
}
add_filter('pre_get_posts', 'change_wp_search_size'); // Conectează funcția noastră personalizată la filtrul de cerere

Dacă dorești să afișezi un număr nelimitat de articole, folosește -1.

19 mar. 2012 14:06:29
Comentarii

showposts este învechit, folosește posts_per_page. În orice caz, primul exemplu nu va funcționa - va ignora termenul de căutare și va afișa doar ultimele 999 de postări. Ar trebui să îl combinați cu interogarea curentă (vezi Codex). Al doilea răspuns este cu mult mai bun și, după cum subliniază @WouterB, evită reinterogarea bazei de date.

Stephen Harris Stephen Harris
19 mar. 2012 14:33:24

Mulțumesc @Stephen Harris, am copiat primul exemplu dintr-un blog foarte vechi și apoi am realizat că pe un site mai nou am folosit a doua opțiune. Nu am analizat detaliile.

WouterB WouterB
19 mar. 2012 14:42:57

Mulțumesc Wouter, funcționează! De asemenea, folosesc acest cod pentru a afișa numărul de rezultate global $wp_query; $total_results = $wp_query->found_posts; echo $total_results; și acum afișează întotdeauna 0.

Andycap Andycap
20 mar. 2012 19:25:00

Vă rugăm să nu sugerați query_posts() nici măcar ca o soluție "rapidă și murdară".

s_ha_dum s_ha_dum
14 nov. 2015 16:26:01

Pentru a afișa toate articolele, așa cum se menționează în întrebare, puteți schimba 10 în -1 $query->query_vars['posts_per_page'] = -1;

allicarn allicarn
1 iun. 2018 06:03:00
1

Destul de simplu: -1 suprascrie limita. Doar îmbinați interogarea implicită cu argumentele personalizate.

global $wp_query;
query_posts( 
    wp_parse_args(
         $wp_query->query
        ,array( 'posts_per_page' => -1 )
    )
);
19 mar. 2012 18:18:02
Comentarii

Mulțumesc kaiser, prefer cealaltă metodă fără dublarea interogărilor. Oricum, acest lucru ar funcționa și el.

Andycap Andycap
20 mar. 2012 19:27:10
1

Încearcă http://wordpress.org/extend/plugins/custom-post-limits/ Poți seta limite independente/număr de articole pentru toate tipurile de rezultate, precum căutare, categorii, etichete, arhive, autori, pagini, etc., fără a avea nevoie de șabloane de pagină sau bucle personalizate.

19 mar. 2012 15:09:05
Comentarii

De data aceasta prefer să obțin rezultatul fără un plugin. Totuși, deja am folosit cel pe care l-ai sugerat și este foarte util pentru personalizarea rezultatelor căutării.

Andycap Andycap
20 mar. 2012 19:29:44