[WordPress] pre_get_posts 에 대해 알아보자
워드프레스에서 글 목록을 불러 올 때는 아래와 같은 순서로 진행됩니다. 사용자가 지정한 조건에 만족하는 쿼리가 생성되고, 해당 쿼리가 실행 되면서 글 목록이 로드 됩니다.
사용자 조건에 만족하는 쿼리
여기서 사용자 조건에 만족하는 쿼리에는 아래와 같은 것들이 포함 될 수 있습니다.
- 전체 글 목록 조회
- ID 가 64와 72인 카테고리의 글 목록 조회
- type 이 post 인 글 목록 조회
- 글 목록에서 ID 가 216인 제외
보통의 경우 이런 조건들이 이미 쿼리가 생성 될 때 모두 반영 되지만, 쿼리가 이미 생성된 상태에서 해당 조건을 바꾸려면 어떻게 해야 할까요.
쿼리 생성 -> pre_get_posts -> 쿼리 실행
쿼리가 생성되고 나서 실제 실행 되어 글 목록을 불러 오기 직전에 pre_get_posts
액션이 발동 됩니다. 따라서 pre_get_posts
는 실제 쿼리 생성 당시에는 영향을 미치지 않으며, 생성된 쿼리의 일부 조건을 수정하여 불러올 글 목록을 바꿀 수 있는 것입니다.
실전 예제
pre_get_posts
와 add_action
을 이용한 실전 예제는 아래와 같습니다.
특정 카테고리의 글 목록 조회
function index_new( $query ) {
$query->set( 'cat', '64, 72' );
}
add_action( 'pre_get_posts', 'index_new' );
$query
에서 cat
를 64 와 72 로 고정함으로써 카테고리 ID 가 64 와 72 에 포함되는 글 목록만 조회 하는 작업입니다.
글 목록에서 포스트만 조회하기
function index_new( $query ) {
$query->set( 'post_type', 'post' );
}
add_action( 'pre_get_posts', 'index_new' );
경우에 따라 글 목록에 포스트와 페이지가 같이 나올 수 있는데, post_type
을 post
로 고정함으로써 페이지는 목록에서 제외시키는 방법입니다.
특정 글을 목록에서 제외하기
function index_new( $query ) {
$query->set( 'post__not_in', 'array(216)' );
}
add_action( 'pre_get_posts', 'index_new' );
쿼리에서 post__not_in
의 값으로 216을 넣음으로써, 글 목록에 ID가 216 인 포스트는 제외시키는 방법입니다.
이렇듯 다양한 방법 조건을 기존에 생성된(하지만 아직 실행 되지 않은) 쿼리에 적용함으로써, 사용자가 원하는 글 목록을 가져올 수 있도록 하는 것이 바로 pre_get_posts
액션입니다.
댓글 남기기