posts_per_page no limit

37

Quero devolver TODAS as postagens com query_posts . Eu tentei definir posts_per_page para um número realmente alto, mas query_posts enlouquece e não retorna nenhuma postagem. Qual é a maneira correta de consultar postagens sem limite?

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

5 respostas

73

-1 é a sua resposta! Procure posts_per_page aqui .

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

Advertência importante : isso pode resultar em uma consulta muito grande que pode derrubar o site. Faça isso apenas se tiver certeza de que seu banco de dados pode lidar com isso. Não em temas ou plugins públicos.

    
por Rutwick Gangurde 11.12.2011 / 18:48
fonte
19

Ou, alternativamente, você pode passar WP_Query (que é o que query_posts usa) o argumento nopaging , que basicamente faz a mesma coisa ..

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

Ele fará exatamente o mesmo, mas se você tiver que olhar para trás mais tarde e não se lembrar do que estava fazendo, eu pessoalmente sinto que será mais claro para você, o que você pretendia com esse parâmetro dentro da matriz args.

Como mencionei, no entanto, os dois realmente conseguirão o mesmo.

Não faz mal ter mais de uma abordagem, e é sempre bom compartilhar o que você sabe, basta dizer que essa é a razão da minha resposta, apesar de você já ter uma resposta suficiente ...;)

    
por t31os 12.12.2011 / 18:16
fonte
3

Do seu arquivo de funções de temas filho:

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

    }

}
    
por Brad Dalton 23.02.2014 / 04:19
fonte
1

A resposta certa para o seu problema é 'posts_per_page' => -1 , porque -1 retornará mensagens ilimitadas por página enquanto os outros usuários respondem.

Eu só quero adicionar um add-on para este Q / A,

Se você deseja obter o número de postagens por página da configuração de leitura no Painel de Administração do WordPress, é necessário chamar a função get_option() e passar posts_per_page como uma string para ela.

$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 resposta ajude alguém a me ajudar. Usuários felizes do StackExchange de codificação

    
por Elkhouaja 11.08.2016 / 18:29
fonte
0

Ou ..

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;
}
    
por Ricardo Canelas 22.02.2017 / 11:43
fonte