Arată un număr diferit de articole pe pagină în funcție de context (de ex., homepage, căutare, arhivă)
Î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.
Î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?

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');

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.

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;
}
?>

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

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

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