WP_Query는 WordPress의 강력한 쿼리 클래스로 분류, 레이블, 저자, 시간 및 기타 조건을 기반으로 쿼리 기사를 사용자 정의 할 수 있습니다. 이를 통해 시간, 임의 순서 또는 댓글 수에 따라 기사를 다양한 방식으로 정렬 할 수 있습니다. 간단히 말해서 WP_Query는 기본 쿼리와 무관하게 쿼리 인스턴스입니다.
WordPress에서 메인 쿼리는 프론트 엔드 요청에 의해 자동으로 생성되며 URL의 매개 변수와 WordPress 설정의 기본값을 기반으로 쿼리를 빌드합니다. 보다 정제 된 쿼리가 필요한 경우 WP_Query를 사용하여 사용자 정의 쿼리를 수행해야합니다.
WP_Query는 강력한 기능을 제공하지만 대부분의 경우 기본 쿼리를 소규모 조정하면됩니다. 예를 들어, 기본 루프에서 특정 카테고리의 기사를 제외하거나 특정 저자의 기사 만 표시됩니다. WP_Query를 직접 사용하면 기본 쿼리의 매개 변수를 무시하여 예상 쿼리 결과를 충족하지 않는 쿼리 결과를 유발할 수 있습니다.
따라서 사용자 정의 쿼리가 기본 쿼리의 매개 변수를 상속 받고 쿼리 결과 충돌을 피할 수 있도록 WP_Query를 기본 쿼리와 병합해야합니다.
기본 쿼리와 사용자 정의 쿼리를 병합하는 두 가지 방법이 있습니다. 하나는 functions.php에서 pre_get_posts hook를 사용하고 다른 하나는 템플릿 파일에서 쿼리 매개 변수를 직접 수정하는 것입니다. 각 방법에는 장점과 단점이 있으며 특정 요구에 따라 적절한 방법을 선택해야합니다.
pre_get_posts는 WordPress의 중요한 후크 기능으로 쿼리 전에 쿼리 매개 변수를 수정할 수 있습니다. functions.php 파일에서 pre_get_posts hook 함수를 사용하면 메인 쿼리의 매개 변수를 쉽게 수정하여 원하는 효과를 달성 할 수 있습니다.
예는 다음과 같습니다.
function my_custom_query($query) {
// 백그라운드 쿼리가 아니고 기본 쿼리라면,쿼리 매개 변수를 수정하십시오
if (!is_admin() && $query->is_main_query()) {
$query->set('cat', '-1,-2,-3'); // 들어오지 못하게 하다ID~을 위한1、2、3분류
$query->set('author', '1'); // 만 보여주십시오ID~을 위한1저자의 기사
}
}
add_action('pre_get_posts', 'my_custom_query');
위의 코드에서는 $ query-> set () 함수를 사용하여 쿼리 매개 변수를 수정하여 특정 범주를 제외하고 특정 저자 기사 만 표시하는 기능을 달성합니다.
템플릿 파일의 쿼리를 간단한 수정 만하면 쿼리 매개 변수를 직접 수정할 수 있습니다. 이것은 더 직접적이고 간단합니다. 예를 들어:
// 홈페이지 템플릿의 코드
$featured_posts = new WP_Query(array(
'category_name' => 'featured', // 만 보여주십시오特定分类的文章
'posts_per_page' => 5, // 만 보여주십시오5기사
));
while ($featured_posts->have_posts()) {
$featured_posts->the_post(); // 기사 제목 표시、내용 등
}
// 원래 쿼리를 복원하십시오
wp_reset_postdata();
위의 코드에서는 Category_Name 및 Posts_per_Page 매개 변수를 설정하여 특정 범주의 첫 5 개의 기사를 쿼리합니다. 동시에 WP_RESET_POSTDATA () 함수를 사용하여 후속 쿼리에 영향을 미치지 않도록 원래 쿼리를 복원하십시오.
pre_get_posts 후크를 사용하든 쿼리 매개 변수를 직접 수정하든 다음 지점에주의를 기울여야합니다.
WP_Query를 메인 쿼리와 병합하는 것은 WordPress 개발에서 매우 실용적인 기술입니다. 쿼리를보다 정확하게 사용자 정의하고 충돌을 피하는 데 도움이됩니다. pre_get_posts 후크를 사용하거나 쿼리 매개 변수를 직접 수정하든 불필요한 부작용을 피하기 위해 합리적으로 사용해야합니다.