Arată un număr diferit de articole pe pagină în funcție de context (de ex., homepage, căutare, arhivă)

11 aug. 2010, 19:52:23
Vizualizări: 12.5K
Voturi: 22

În setările de citire, există o opțiune pentru a seta numărul de articole afișate, care afectează numărul de articole afișate în toate contexte. Eu aș dori să afișez un anumit număr de articole pe homepage și un număr diferit de articole pe pagini precum arhivă, rezultatele căutării, etc.

Setări de citire - Numărul maxim de articole afișate pe pagină

Îmi dau seama că aș putea face acest lucru prin editarea fișierelor temei și modificarea parametrilor query acolo, dar aș prefera să am acces mai ușor la o pagină simplă de setări. Acum mult timp, am dat peste un plugin care făcea asta, dar acum nu îl mai găsesc.

Știe cineva vreun plugin care să facă asta, sau chiar o funcție pe care aș putea s-o pun în functions.php pentru a obține același lucru?

1
Comentarii

Probabil te gândeai la plugin-ul 'Different Posts Per Page' al lui @chip-bennett: http://www.chipbennett.net/plugins/cbnet-different-posts-per-page/ care face exact ce dorești într-un mod grafic.

Tom Auger Tom Auger
28 oct. 2011 18:09:39
Toate răspunsurile la întrebare 4
1
25

Cred că cel mai bun mod de a face acest lucru într-un plugin este să rulezi următoarea funcție exemplu atunci când este întâlnit action hook-ul pre_get_posts. Obiectul $wp_query este disponibil, ceea ce înseamnă că tag-urile condiționale sunt disponibile, dar înainte ca WordPress să preia postările, ceea ce înseamnă că modifici variabilele de interogare înainte ca prima interogare să fie rulată, în loc să adaugi o a doua interogare ca în cazul în care query_posts() este folosit într-un fișier de template.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//acest cod adaugă funcția de mai sus la acțiunea 'pre_get_posts'     
add_action('pre_get_posts', 'custom_posts_per_page');
11 aug. 2010 21:08:21
Comentarii

Folosesc această funcție pe propriul meu site. A fost ușor să o copiez și să o lipesc aici pentru tine.

kevtrout kevtrout
12 aug. 2010 19:11:04
2

poți face o buclă personalizată folosind query_posts și să specifici numărul de articole în funcție de is_home, is_archive, etc.

doar un simplu if împreună cu query_posts

11 aug. 2010 20:07:58
Comentarii

Da, am menționat asta în întrebarea mea. Caut o modalitate de a face acest lucru, astfel încât să nu fie nevoie să editez mai multe fișiere ale temei pentru a modifica setările. Mulțumesc.

Doug Doug
12 aug. 2010 18:21:07

Este o idee destul de proastă să faci asta în acest fel. WordPress deja rulează o interogare. Dacă pui query_posts în tema ta, vei ignora interogarea originală și vei face una nouă, redundantă.

Krzysiek Dróżdż Krzysiek Dróżdż
11 dec. 2013 20:45:07
0
-1

Pentru a adăuga la această întrebare. Știe cineva cum să determine post_per_page pentru această funcție function custom_posts_per_page($query) dacă adaug o pagină nouă în index.php astfel:

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>
20 ian. 2011 08:56:50
3
-1

Îmi dau seama că aș putea face asta prin editarea fișierelor temei și modificarea parametrilor interogării acolo, dar aș prefera să am acces mai ușor la o pagină simplă de setări.

Pentru completitudine, am descoperit că query_posts combinat cu concatenarea $query_string funcționează bine.

Am plasat acest cod în index.php (tema mea nu are category.php) ...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

Desigur, ceea ce facem aici este modificarea șirului de interogare intern al buclei, suprascriind numărul implicit de articole pe pagină.

Funcționează perfect pentru a furniza o listă mai mică de articole pe pagina principală unde afișez postări complete și o listă mult mai mare de articole oriunde altundeva (categorii, după dată etc.) unde afișez doar rezumatele postărilor.

Totuși, rețineți că, spre deosebire de răspunsul acceptat, aceasta va rula interogarea de două ori, deci nu este o soluție la fel de elegantă.

6 iul. 2011 23:25:12
Comentarii

Jeff, căutam un loc centralizat pentru a controla numărul de postări returnate în diferite contexte. Răspunsul tău funcționează doar dacă folosești index.php pentru a gestiona TOATE contextele, ceea ce majoritatea temelor nu fac. Pe lângă creșterea numărului de apeluri către baza de date (ceea ce afectează performanța), tehnica ta poate modifica și răspunsul la tag-urile condiționale (de exemplu, is_home() sau is_front_page) în mod neașteptat. În sfârșit, dacă dorești să adaugi bucle secundare pe o pagină, NU ar trebui să folosești query_posts, ci mai degrabă "new WP_Query" (sau get_posts).

Doug Doug
7 iul. 2011 19:26:45

@doug aceasta nu este o buclă secundară, ci suprascrie bucla principală - și da, această temă anume folosește index.php pentru a randă totul, este destul de minimalistă. Am considerat că acest răspuns are mai mult sens aici, dar dacă dorești, pot pune o întrebare separată și să îmi răspund singur dacă acest răspuns te deranjează cumva.

Jeff Atwood Jeff Atwood
7 iul. 2011 21:51:10

De fapt am citit greșit paragraful tău penultim și am crezut că listele de postări "mai mari" și "mai mici" erau pe aceeași pagină, așa că ultima mea propoziție de mai sus a fost irelevantă. Și da, este perfect legitim să pui tot codul în index.php dacă dorești. Și dacă acesta este cazul, atunci metoda ta este o modalitate rapidă și ușoară de a face acest lucru, așa că voi elimina votul negativ după ce perioada de blocare de 20 de ore se termină. Chiar și așa, trimiterea unei noi interogări în loc să modifici interogarea originală ca în răspunsul lui kevtrout este mai puțin de dorit din motivele deja menționate (de tine, de mine și de WP Codex).

Doug Doug
8 iul. 2011 16:24:40