web-dev-qa-db-fra.com

posts_per_page pas de limite

Je veux renvoyer TOUS les articles avec query_posts. J'ai essayé de définir posts_per_page sur un nombre très élevé, mais query_posts est paniqué 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' => ?
    );
40
Banjer

-1 est votre réponse! Cherchez posts_per_pageici .

$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 : Cela peut entraîner une très grosse requête qui peut 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 plugins.

78
Rutwick Gangurde

Ou bien vous pouvez également passer WP_Query (c'est 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 pouvez pas vous souvenir de ce que vous faisiez, je pense personnellement que ce sera plus clair pour vous, en quoi consistait ce paramètre dans les arguments tableau.

Comme je l'ai mentionné cependant, ils obtiendront tous les deux la même chose.

On ne peut pas nuire d'avoir 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 ..;)

20
t31os

A partir de votre fichier de fonctions thèmes 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' );

    }

}
3
Brad Dalton

La bonne réponse pour votre problème est 'posts_per_page' => -1 car -1 renverra un nombre illimité de messages par page, à l'instar des autres utilisateurs.

Je veux juste ajouter un add-on à cette Q/A,

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 transmettre posts_per_page sous forme de chaîne.

$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 cela m'aide. Joyeux Codage Utilisateurs Stackexchange

1
Elkhouaja

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;
}
0
Ricardo Canelas