[WordPress] posts_per_page=-1로 모든 게시물 가져오기
WordPress에서 게시물 목록을 만들다 보면 정해진 개수만 가져오는 것이 아니라, 조건에 맞는 게시물을 모두 출력해야 할 때가 있습니다.
이때 WP_Query의 posts_per_page에 -1을 지정하면 페이지당 개수 제한 없이 모든 결과를 가져올 수 있습니다.
posts_per_page
posts_per_page는 WP_Query에서 한 페이지에 조회할 게시물 수를 지정하는 쿼리 변수입니다.
예를 들어 다음 코드는 조건에 맞는 게시물을 최대 6개까지 조회합니다.
$args = array(
'posts_per_page' => 6,
);
$query = new WP_Query( $args );블로그 목록이나 최근 글, 관련 글처럼 일부 게시물만 보여줄 때 주로 사용합니다.
posts_per_page = -1
$args = array(
'posts_per_page' => -1,
);
$query = new WP_Query( $args );posts_per_page에 -1을 지정하면 현재 쿼리 조건에 맞는 게시물을 모두 조회합니다.
게시물이 5개라면 5개, 20개라면 20개를 반환합니다. 다만 공개 여부나 게시물 유형, 카테고리 같은 다른 조회 조건까지 무시하는 것은 아닙니다. post_type, post_status, tax_query 등 함께 설정한 조건 안에서 개수 제한만 해제합니다.
WordPress 내부에서는 posts_per_page가 -1이면 nopaging을 true로 처리합니다. 따라서 결과를 여러 페이지로 나누지 않고 한 번에 가져옵니다.
Bricks Query Loop 에서 적용하기
Bricks의 Query Loop에서 쿼리 유형을 Posts로 선택하면 내부적으로 WP_Query 방식의 쿼리를 사용합니다.
따라서 Posts Per Page에 -1을 입력하면 조건에 맞는 게시물을 모두 출력할 수 있습니다.
직원, 지점, FAQ처럼 전체 개수가 작고 크게 늘어나지 않는 콘텐츠를 한 번에 보여줄 때 유용합니다.
언제 사용하는 것이 좋을까?
다음처럼 게시물 수가 적고 관리 가능한 콘텐츠에 적합합니다.
직원 또는 팀원 목록
지점 목록
FAQ
소규모 제품 목록
반대로 블로그, 뉴스, 포트폴리오처럼 게시물이 계속 추가되는 콘텐츠에는 신중하게 사용해야 합니다.
-1은 쿼리 조건에 맞는 데이터를 한 번에 모두 불러오기 때문에 게시물 수가 많아질수록 데이터베이스 조회, PHP 처리, HTML 출력량이 함께 증가합니다. 이런 콘텐츠에는 적절한 개수를 지정하고 pagination으로 페이지마다 나누거나 Load More를 사용하는 편이 안전합니다.
$args = array(
'posts_per_page' => 9,
'paged' => get_query_var( 'paged', 1 ),
);기타 특징
페이지네이션(Pagination) 적용 불가
posts_per_page를 -1로 설정하면 WordPress가 페이지 구분을 사용하지 않는 nopaging 상태로 처리합니다.
따라서 페이지네이션과 함께 구성하기 보다는 모든 결과를 한 화면에 출력하려는 경우에 사용하는 값으로 이해하는 것이 좋습니다.
offset이 무시됨
WordPress 공식 문서에 따르면 posts_per_page가 -1일 때 offset은 무시됩니다.
일부 결과를 건너뛴 뒤 나머지를 모두 가져오려는 용도로 -1과 offset을 함께 사용해서는 안 됩니다. 필요한 경우에는 쿼리 조건이나 가져올 게시물 ID를 별도로 구성해야 합니다.
정리
posts_per_page는 WP_Query가 한 페이지에 가져올 게시물 수를 지정하는 쿼리 변수입니다.
'posts_per_page' => -1위와 같이 설정하면 다른 쿼리 조건에 맞는 게시물을 페이지 구분 없이 모두 조회합니다.
Bricks Query Loop의 Posts Per Page에도 같은 값을 사용할 수 있지만, 직원이나 FAQ처럼 개수가 제한된 콘텐츠에 사용하는 것이 적절합니다. 계속 증가하는 콘텐츠라면 성능과 사용자 경험을 고려해 조회 개수를 제한하고 페이지네이션 또는 Load More를 사용하는 편이 좋습니다.