Suprascrie numărul implicit de articole afișate pentru o buclă personalizată?

7 feb. 2011, 22:19:27
Vizualizări: 14.3K
Voturi: 4

Este posibil să suprascrii numărul setat de articole de blog afișate pe pagină (așa cum este definit în secțiunea Setări de citire din administrarea WordPress)? Doresc să fac astfel încât o buclă personalizată pe care o folosesc să afișeze un număr nelimitat de articole.

0
Toate răspunsurile la întrebare 5
2
10

Argumentul care controlează câte articole sunt afișate în interogare este posts_per_page

<?php query_posts( array( 
                         'post_type' => 'post',
                         'posts_per_page' => -1 ) 
      ); 
?>

De asemenea, este important de menționat că există o eroare în ramura 3.0 care împiedică afișarea tuturor articolelor atunci când se folosește valoarea -1. Aceasta a fost corectată în versiunea 3.1, dar o soluție temporară ar fi utilizarea unui număr foarte mare în loc de -1.

vezi:

http://core.trac.wordpress.org/ticket/15150

7 feb. 2011 23:13:58
Comentarii

Există o greșeală de tipar în parametrul tău pentru posts_per_page. Ai scris post_per_page în loc de posts_per_page. (Am încercat să editez postarea ta, dar nu am permisiuni de editare). Mulțumesc mult!

user1462 user1462
7 feb. 2011 23:29:35

Evită această funcție, este foarte dăunătoare pentru performanță, cauzează multe probleme cu paginarea etc. Folosește pre_get_posts pentru a modifica ce se afișează pe o pagină și WP_Query dacă vrei să preiei postări din alte motive. Niciodată nu folosi query_posts

Tom J Nowell Tom J Nowell
3 apr. 2020 18:55:11
0

Desigur, modifică interogarea adăugând

<?php query_posts('post_type=post&numberposts=-1'); ?>

7 feb. 2011 22:43:18
0

Eileen are dreptate, dar este mai bine să folosești argumentele ca un array <?php query_posts( array( 'post_type' => 'post', 'numberposts' => -1 ) ); ?>

7 feb. 2011 23:01:25
0

Am avut aceeași problemă... Am decis să adaug o variabilă personalizată și apoi să prind acea variabilă în timpul pre_get_posts pentru a seta query_var-ul post_per_page:

function custom_query_vars_filter($vars) {
  $vars[] = 'post_per_page_override';
  return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );


add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {

if( $query->query_vars['post_per_page_override'] == '3') {
        $query->set('posts_per_page', '3');
    }
}

Apoi am mers și mai departe și am făcut să obțină exact cantitatea pe care doriți să o afișați în variabila personalizată a interogării:

function custom_query_vars_filter($vars) {
  $vars[] = 'post_per_page_override';
  return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );


add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {

if( $query->query_vars['post_per_page_override']) {
        $customPPPlimit = $query->query_vars['post_per_page_override'];
        $query->set('posts_per_page', $customPPPlimit);
    }
}

A funcționat pentru mine...

1 mar. 2017 01:08:00
0

Dacă folosești o buclă personalizată, pur și simplu specifică posts_per_page, de exemplu:


$query = new \WP_Query( [ 'posts_per_page' => 100 ] );
if ( $query->have_posts() ) {
    ......etc

Poți seta posts_per_page la -1 pentru un număr nelimitat de articole, dar aceasta este o practică foarte proastă. În schimb, setează câte articole crezi că serverul tău poate servi fără să cedeze, astfel încât site-ul tău să nu se blocheze dacă sunt create prea multe articole. 200 este o limită superioară bună.

Altfel, folosește filtrul pre_get_posts pentru a modifica parametrii transmiși către interogări:

add_action( 'pre_get_posts', function ( $query ) {
    if ( is_admin() ) {
        return;
    }
    $query->set( 'posts_per_page', 100 );
}

Reține că aceasta va seta toate interogările la 100 de pagini, inclusiv feed-uri, REST API, XMLRPC, etc.

În plus, unii oameni vor recomanda query_posts, dar aceasta este o practică proastă și va cauza multe alte probleme.

3 apr. 2020 19:05:55