it-swarm-eu.dev

posts_per_page žádný limit

Chci vrátit VŠECHNY příspěvky s query_posts. Snažil jsem se nastavit posts_per_page na opravdu vysoké číslo, ale query_posts se šíří a nevrací žádné příspěvky. Jaký je správný způsob dotazování příspěvků bez omezení?

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

-1 je vaše odpověď! Vyhledejte posts_per_pagezde .

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

Důležité upozornění : To může mít za následek velmi obrovský dotaz, který může web snížit. Udělejte to pouze v případě, že jste si jisti, že s databází může pracovat. Ne ve veřejných tématech nebo pluginech.

78
Rutwick Gangurde

Nebo alternativně můžete předat WP_Query (což je to, co query_posts používá) argument nopaging, který v podstatě dělá totéž.

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

Bude to přesně to samé, ale pokud se na to budete muset dívat později a nebudete si moci vzpomenout, co jste dělali, osobně se domnívám, že vám to bude jasnější, co máte v úmyslu s tímto parametrem uvnitř args. pole.

Jak jsem se však zmínil, oba budou ve skutečnosti dosáhnout stejného.

Nemůžu ublížit, pokud máte více než jeden přístup, a vždycky je dobré se podělit o to, co víte, stačí říct, že to je důvod mé odpovědi, i když už máte dostačující.;)

20
t31os

Ze souboru podřízených motivů:

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

Správná odpověď pro váš problém je 'posts_per_page' => -1, protože -1 vrátí neomezené příspěvky na stránku.

Chci přidat doplněk k tomuto Q/A,

Pokud chcete získat počet příspěvků na stránce z nastavení čtení na WordPress administračním panelu, musíte zavolat funkci get_option() a předat posts_per_page jako řetězec.

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

Doufám, že tato odpověď pomůže někomu, jak mi to pomůže. Happy Coding Stackexchange Uživatelé

1
Elkhouaja

Nebo..

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