posts_per_page sans limite

37

Je veux renvoyer TOUTES les publications avec query_posts . J'ai essayé de définir posts_per_page sur un nombre très élevé, mais query_posts a peur et ne renvoie aucun message. Quelle est la bonne façon d'interroger les publications sans limite?

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

5 réponses

73

-1 est votre réponse! Recherchez posts_per_page ici .

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

Mise en garde importante : il peut en résulter une requête très volumineuse susceptible de détruire le site. Ne le faites que si vous êtes sûr que votre base de données peut le gérer. Pas dans les thèmes publics ou les plugins.

    
réponse donnée Rutwick Gangurde 11.12.2011 - 18:48
la source
19

Vous pouvez également transmettre à WP_Query (ce que query_posts utilise) l'argument nopaging , qui fait essentiellement la même chose ..

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

Cela fera exactement la même chose, mais si vous devez regarder en arrière plus tard et que vous ne vous souvenez plus de ce que vous faisiez, je pense personnellement que ce sera plus clair pour vous, en quoi consistait ce paramètre à l'intérieur du tableau args.

Comme je l’ai mentionné cependant, ils obtiendront tous les deux le même résultat.

On ne peut pas nuire à plus d’une approche, et il est toujours agréable de partager ce que vous savez, il suffit de dire que c’est la raison de ma réponse, même si vous en avez déjà une suffisante ..;)

    
réponse donnée t31os 12.12.2011 - 18:16
la source
3

À partir du fichier de fonctions de votre thème enfants:

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

    }

}
    
réponse donnée Brad Dalton 23.02.2014 - 04:19
la source
1

La bonne réponse pour votre problème est 'posts_per_page' => -1 car -1 renverra un nombre illimité de messages par page au fur et à mesure que les autres utilisateurs répondent.

Je veux juste ajouter un complément à cette question / réponse,

Si vous souhaitez obtenir le nombre de publications par page à partir du paramètre de lecture du panneau d'administration de WordPress, vous devez appeler la fonction get_option() et lui passer posts_per_page .

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

J'espère que cette réponse aidera quelqu'un comme elle m'aide. Happy Coding Utilisateurs Stackexchange

    
réponse donnée Elkhouaja 11.08.2016 - 18:29
la source
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;
}
    
réponse donnée Ricardo Canelas 22.02.2017 - 11:43
la source

Lire d'autres questions sur les étiquettes