posts_per_page sin límite

37

Quiero devolver TODAS las publicaciones con query_posts . Intenté establecer posts_per_page en un número realmente alto, pero query_posts se vuelve loco y no devuelve ninguna publicación. ¿Cuál es la forma correcta de consultar publicaciones sin límite?

$args = array(
    'post_type'      => 'post',
    'cat'            => '22,47,67',
    'orderby'        => 'name',
    'order'          => 'ASC',
    'hide_empty'     => 1,
    'depth'          => 1,
    'posts_per_page' => ?
    );
    
pregunta Banjer 11.12.2011 - 16:50

5 respuestas

73

-1 es tu respuesta! Busque posts_per_page aquí .

$args = array(
'post_type'      => 'post',
'cat'            => '22,47,67',
'orderby'        => 'name',
'order'          => 'ASC',
'hide_empty'     => 1,
'depth'          => 1,
'posts_per_page' => -1
);

Advertencia importante : esto puede resultar en una consulta muy grande que puede hacer que el sitio caiga. Haga esto solo si está seguro de que su base de datos puede manejarlo. No en temas públicos o complementos.

    
respondido por el Rutwick Gangurde 11.12.2011 - 18:48
19

O alternativamente, puedes pasar WP_Query (que es lo que query_posts usa) el argumento nopaging , que básicamente hace lo mismo ..

$args = array(
    'nopaging' => true
    // Your other args, etc..
);

Hará exactamente lo mismo, pero si tienes que volver a mirarlo más tarde y no puedo recordar lo que estabas haciendo, personalmente siento que será más claro para ti, qué es lo que pretendías con ese parámetro dentro de la matriz args.

Sin embargo, como mencioné, ambos lograrán lo mismo.

No me duele tener más de un enfoque, y siempre es bueno compartir lo que sabes, basta con decir que esa es la razón de mi respuesta, a pesar de que ya tienes una suficiente ...;)

    
respondido por el t31os 12.12.2011 - 18:16
3

Desde el archivo de funciones de los temas secundarios:

add_action( 'pre_get_posts', 'wpsites_no_limit_posts' );

function wpsites_no_limit_posts( $query ) {

if( $query->is_main_query() && !is_admin() && is_home() ) {

$query->set( 'posts_per_page', '-1' );
$query->set( 'order', 'ASC' );
$query->set( 'post_type', 'post' );
$query->set( 'cat', '22,47,67' );
$query->set( 'orderby', 'name' );
$query->set( 'order', 'ASC' );
$query->set( 'hide_empty', '1' );
$query->set( 'depth', '1' );

    }

}
    
respondido por el Brad Dalton 23.02.2014 - 04:19
1

La respuesta correcta para su problema es 'posts_per_page' => -1 porque -1 devolverá un número ilimitado de publicaciones por página, a medida que los demás usuarios respondan.

Solo quiero agregar un complemento a esta Q / A,

Si desea obtener el número de publicaciones por página de la configuración de lectura en el Panel de administración de WordPress, debe llamar a la función get_option() y pasarle posts_per_page como una cadena.

$args = array(
    'post_type'      => 'post',
    'cat'            => '22,47,67',
    'orderby'        => 'name',
    'order'          => 'ASC',
    'hide_empty'     => 1,
    'depth'          => 1,
    'posts_per_page' => get_option('posts_per_page')
    );

Espero que esta respuesta ayude a alguien así como a mí. Codificación feliz para usuarios de Stackexchange

    
respondido por el Elkhouaja 11.08.2016 - 18:29
0

O ..

function getAll($arg, $posts_per_page = 50)
{
    $data = array();
    $page = 1;

    do{
        $arg['paged'] = $page;
        $arg['posts_per_page'] = $posts_per_page;

        $query = new WP_Query($arg);

        foreach ($query->posts as $post){
            $data[] = $post;
        }

        $page++;

    }while(count($query->posts) === $posts_per_page);

    return $data;
}
    
respondido por el Ricardo Canelas 22.02.2017 - 11:43

Lea otras preguntas en las etiquetas