posts_per_page 무제한


41

로 모든 게시물을 반환하고 싶습니다 query_posts. 나는 posts_per_page정말로 높은 숫자로 설정 을 시도 했지만 query_posts기절하고 게시물을 반환하지 않습니다. 제한없이 게시물을 쿼리하는 올바른 방법은 무엇입니까?

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

6
나는 잠시 동안 인터넷 검색을하고 WP 코덱을 검색했지만이 간단한 질문에 대한 직접적인 대답을 찾을 수는 없습니다. 내 질문은 예제 코드와 내 시도가 무엇인지 명확하게 표현되어 있다고 생각합니다 (논쟁의 가치를 높이는 것). 저는 WP 전문가가 아니므로 질문을하기 위해 여기에 왔습니다. 사소한 것처럼 보이는 질문에 대한 답변을 제공하더라도 이러한 Stack Exchange 커뮤니티를 성장시키는 데 도움이됩니다. 나는 개인적으로 검색 결과에서 스택 오버플로 링크를 보는 것을 좋아합니다.
Banjer

또한 답변 주셔서 감사합니다. 의견이 아닌 답변으로 게시해야하므로 받아 들일 수 있습니다.
Banjer

나는 당신의 요점을 가지고 있으며 질문 을 작성 하는 당신의 노력에 감사드립니다 . 또한 전문가가 아닌 질문이이 커뮤니티에서 가치가 있음을 동의합니다. 반면에 너무 많은 질문은 일부 전문가가 여기에 참여하지 못하게 할 수 있습니다. 그것은 내가 추측하는 어떤 종류의 균형에 관한 것입니다. 어쨌든 나는 큰 투표권 자이므로 다음 질문을 기대하고 있습니다 :) WPSE에서 좋은 시간 보내십시오.
Michal Mau

PS : 당신은 또한 교체 할 type에 대한 post_type(또는 모두이 줄을 제거). Rutwick의 답변과 귀하의 질문을 모두 편집하여 누군가 가이 작은 실수를 복사하여 붙여 넣지 못하게합니다.
Michal Mau

@Maugly 수정에 감사드립니다 ... posts_per_page에 집중하여 오타가 복사되었습니다! ;)
Rutwick Gangurde

답변:


81

-1이 답입니다! posts_per_page 여기를 찾으 십시오 .

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

중요한 경고 : 이로 인해 사이트가 다운 될 수있는 매우 큰 쿼리가 발생할 수 있습니다. 데이터베이스가 처리 할 수 ​​있다고 확신하는 경우에만이 작업을 수행하십시오. 공개 테마 나 플러그인에는 없습니다.


6
중요한 경고 : 이로 인해 사이트가 다운 될 수있는 매우 큰 쿼리가 발생할 수 있습니다. 데이터베이스가 처리 할 수 있다고 확신하는 경우에만이 작업을 수행 하십시오 . 공개 테마 나 플러그인에는 없습니다.
fuxia

@toscho 답변에 업데이트로 댓글 추가
Rutwick Gangurde

당신은 내 목숨을 구합니다 !!
Darlan Dieterich

@DarlanDieterich 다행입니다. :)
Rutwick Gangurde

23

또는 대안 당신은 전달할 수 있습니다 WP_Query(무엇을하는 query_posts용도) nopaging기본적으로 같은 일을 인수 ..

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

그것은 정확히 똑같을 것입니다.하지만 나중에 그것을 되돌아보고 당신이하고있는 일을 기억할 수 없다면, 개인적으로 당신에게 더 명확하게 느낄 것이라고 생각합니다. 정렬.

그러나 언급했듯이 둘 다 실제로 동일하게 달성됩니다.

하나 이상의 접근 방식으로 상처를 입을 수 없으며 이미 알고있는 것을 공유하는 것이 좋습니다. 이미 충분한 답변이 있지만 내 대답의 이유라고 말하면 충분합니다 ..;)


3

자녀 테마 기능 파일에서 :

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

    }

}

1

귀하의 문제에 대한 정답은 다른 사용자가 답변하는 것처럼 페이지 당 무제한 게시물을 반환 'posts_per_page' => -1하기 때문 -1입니다.

이 Q / A에 애드온을 추가하고 싶습니다.

WordPress 관리 패널의 읽기 설정에서 페이지 당 게시물 수를 얻으려면 get_option()함수 를 호출하고 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')
    );

이 답변이 나를 도울 때 누군가에게 도움이되기를 바랍니다. 행복한 코딩 스택 교환 사용자


실제로 좋은 추가입니다!
Herbert Van-Vliet

1

또는..

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;
}

2
코드를 설명하기위한 컨텍스트, 질문을 해결하기위한 아이디어를 추가해야합니다.
bueltge

1

Ricardo를 약간 수정하여 사용 :

static $paged;
$post_ids = [];
do {
    $paged++;
    $defaults = [
        'fields' => 'ids', // Only return the ID field to make this query faster.
        'post_type' => 'post',
        'posts_per_page' => 100,
        'no_found_rows' => false, // We need pagination & the count for all posts found.
        'paged' => $paged,
        'update_post_term_cache' => false,
        'update_post_meta_cache' => false,
    ];
    $query = new WP_Query($defaults);
    if ($query->have_posts()) {
        foreach ($query->posts as $id) {
            $post_ids[] = $id;
        }
    }
} while ($query->max_num_pages > $paged);

return $post_ids;

이는 ID 행에 대해서만 쿼리하고 용어 및 메타 캐시의 업데이트를 피함으로써 쿼리 시간을 크게 증가시킵니다.


좋은! 공유해 주셔서 감사합니다.
Ricardo Canelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.