WordPress에서 WP_Query 클래스를 사용하는 방법?

게시 됨: 2024-08-09

목차
WP_Query란 무엇입니까?
WP_Query에 대한 간단한 메모
WP_Query를 어떻게 활용할 수 있나요?
WP_Query Vs query_posts(): 어느 것이 더 좋나요?
WP_Query 사용의 몇 가지 예
결론

WP_Query란 무엇입니까?

WP_Query 데이터세트에 대한 사용자 정의 쿼리를 구성하여 게시물 및 기타 콘텐츠를 검색하고 페이지에 렌더링할 수 있는 WordPress의 강력한 PHP 클래스입니다. 이는 데이터베이스와 상호 작용하고 다양한 기준에 따라 콘텐츠를 가져오는 유연하고 효율적인 방법을 제공합니다.


WP_Query에 대한 간단한 메모

WordPress가 게시물, 페이지, 댓글 또는 설정과 같은 모든 웹사이트 데이터를 MySQL 데이터베이스에 저장한다는 사실을 알고 계실 것입니다.

따라서 귀하의 웹 사이트를 방문하는 모든 사람에 대해 요청이 즉시 이 데이터베이스로 전송되어 화면에 표시할 게시물이든 페이지이든 요청한 데이터를 검색합니다.

그러나 WP_Query의 도움으로 데이터베이스에서 특정 정보를 검색하는 데 도움이 되는 쿼리를 생성할 수 있다는 사실에 놀랄 것입니다. 따라서 누군가 귀하의 콘텐츠를 검색할 때마다 WordPress는 이 내장 클래스를 사용합니다.

의심할 바 없이 SQL을 사용하여 이러한 모든 쿼리를 작성할 수는 있지만 매우 어렵고 가장 쉬운 방법은 아닙니다. 반면에 WP_Query는 훨씬 쉽습니다.

WP_Query는 방문자가 검색할 필요 없이 웹사이트의 특정 콘텐츠를 표시하는 사용자 정의 쿼리를 생성할 수 있어 매우 유용합니다.

간단히 말해서, WP_Query는 개발자가 복잡한 코드를 작성할 필요 없이 WordPress 사이트에 표시되는 콘텐츠와 표시 방식을 더 쉽게 제어할 수 있게 해주는 도구입니다.

WordPress에서 "블로그"라는 특별한 유형의 콘텐츠를 생성한다고 가정해 보겠습니다. 사이트에 이러한 "블로그" 게시물을 표시하려면 WP_Query를 사용하여 특수 쿼리를 작성할 수 있습니다.

// WP QUERY
$query = new WP_Query([
'post_type' => 'blog', // Type of content
'posts_per_page' => 6, // Number of posts to show
'category_name' => 'Entertainment' // Category filter
]);

이제 요청된 쿼리를 표시하기 위해 WP_Query는 루프를 사용자 정의하는 데 도움이 되는 단축키와 내장 기능을 제공합니다. 루프는 WordPress가 페이지에 게시물을 표시하는 데 사용하는 약간의 PHP 코드입니다.

WordPress는 WP_Query에서 설정한 기준(예: 게시물 유형, 게시물 수, 카테고리)에 따라 각 게시물을 처리하고 형식을 지정합니다.

이 강력한 도구는 개발자가 복잡한 데이터베이스 쿼리를 작성하지 않고도 WordPress 테마가 콘텐츠를 표시하는 방법을 쉽게 사용자 정의할 수 있도록 도와줍니다.


WPOven Dedicated Hosting

WP_Query를 어떻게 활용할 수 있나요?

이제 WP_Query가 무엇이고 정확히 무엇을 하는지 알았습니다. 이 강력한 도구를 활용할 수 있는 다양한 사례 시나리오를 확인해 보겠습니다.

1. WP_Query에서 루프 생성

먼저 Loop가 무엇인지 이해해야 합니다. 데이터에서 게시물 데이터를 가져와 웹 사이트에 표시하는 데 반응성이 뛰어난 WordPress의 일부입니다. 주로 테마 템플릿을 기반으로 콘텐츠가 어떻게 보이는지 결정하는 데 중점을 둡니다.

루프가 웹사이트에 무엇을 보여줄 수 있나요?

선택한 설정에 따라 루프에 다음이 표시될 수 있습니다.

  • 사용자 정의 게시물 유형 및 사용자 정의 필드
  • 홈페이지에 게시물 제목과 간단한 설명을 게시하세요.
  • 단일 게시물의 내용과 댓글
  • 템플릿 태그를 사용한 개별 페이지의 내용

이해를 돕기 위해 아래는 Loop의 간단한 구조를 보여줍니다.

기본 루프 예

<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Display post content
endwhile;
endif;
?>

  • 여기서 have_posts() 함수는 사용 가능한 게시물이 있는지 확인합니다.
  • while ( have_posts() ) : the_post(); : 게시물이 있는 경우 이 루프는 각 게시물에 대해 실행되고 해당 내용을 표시합니다.

WP_Query로 루프 사용자 정의

때로는 모든 게시물을 표시하고 싶지 않을 수도 있습니다. WP_Query를 사용하여 표시되는 내용을 맞춤설정할 수 있습니다.

<?php
// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// No posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

이 사용자 정의 루프의 작동 방식

  • 쿼리 설정 : $the_query = new WP_Query( $args ); 귀하가 설정한 매개변수(게시물 유형, 카테고리 등)를 기반으로 맞춤 검색어를 생성합니다.
  • 루프 실행 : if ( $the_query->have_posts() ) { ... } 쿼리와 일치하는 게시물이 있는지 확인합니다. 있는 경우 각 게시물의 제목을 목록에 표시합니다.
  • 게시물 데이터 재설정 : wp_reset_postdata(); 사용자 정의 루프가 실행된 후 원본 게시물 데이터가 복원되는지 확인합니다.

사용자 정의 옵션

WP_Query를 사용하면 다음을 수행할 수 있습니다.

  • 특정 카테고리, 작성자 또는 날짜 범위의 게시물 표시
  • 특정 태그 또는 사용자 정의 필드가 있는 게시물 표시

2. WP_Query 인수

WordPress 사이트에서 특정 게시물을 얻으려면 WP_Query를 생성해야 하며 이를 위해서는 다음 네 가지 기본 부분을 포함해야 합니다.

  • 쿼리 인수 : WordPress에 검색할 데이터를 알려줍니다.
  • 쿼리 : 인수를 사용하여 데이터를 가져옵니다.
  • The Loop : 각 게시물을 처리하고 표시합니다.
  • Post Data Reset : 루프가 실행된 후 데이터를 재설정합니다.

그러나 WP_Query의 가장 중요한 구성 요소 중 하나는 데이터베이스에서 가져오려는 특정 게시물을 추출하는 인수(종종 WP_Query 인수라고 함)입니다.

모든 게시물을 표시하는 대신 특정 게시물만 표시하도록 조건을 설정하는 인수가 매우 중요합니다.

인수의 예

  • $args Line : 쿼리 인수를 포함하는 곳입니다.
  • 구조 : 특정 매개변수를 배열에 넣습니다. 다음은 기본적인 예입니다.

$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);

구체적인 예

'WordPress Errors' 태그가 있는 게시물을 표시하려면 다음과 같이 쿼리 인수를 설정합니다.

$query = new WP_Query( array( 'tag' => 'WordPress Errors' ) );

논증이 필수적인 이유

  • 인수 없음, 콘텐츠 없음 : WP_Query 인수를 포함하지 않으면 WordPress는 표시할 게시물을 알 수 없습니다. 귀하의 쿼리는 데이터베이스에서 어떤 콘텐츠도 가져오지 않습니다.

3. WP_query 매개변수 설정

매개변수는 WP_Query를 유용하고 강력하게 만드는 것입니다. 다양한 기능을 사용할 수 있으므로 누구나 데이터베이스 검색을 필터링하는 것이 쉬워졌습니다.

예를 들어 WordPress 사이트에 특정 게시물을 표시하려는 경우 WP_Query를 사용하고 올바른 게시물을 가져오도록 매개변수를 설정할 수 있습니다. 매개변수란 무엇입니까? 마음 속에 또 다른 질문이 있을 수 있습니다.

음, 매개변수는 WordPress에 데이터베이스에서 어떤 종류의 게시물을 가져올지 알려주는 지침과 같습니다.

공통 매개변수의 예

사용할 수 있는 몇 가지 일반적인 매개변수는 다음과 같습니다.

  • cat : 특정 카테고리의 게시물을 표시합니다.
  • 작성자 : 한 명 이상의 특정 작성자가 작성한 게시물을 표시합니다.
  • post_status : 진행 중인 게시물, 예약된 게시물, 게시된 게시물, 삭제된 게시물을 표시합니다.
  • orderby : 작성자, 게시물 유형, 날짜 등을 기준으로 게시물을 정렬합니다.
  • post_per_page : 표시할 게시물 수를 설정합니다.
  • tag : 특정 태그가 붙은 게시물을 표시합니다.
  • order : 게시물을 오름차순 또는 내림차순으로 정렬합니다.
  • post_type : 게시물, 페이지 또는 사용자 정의 게시물 유형을 표시할지 여부를 정의합니다.

매개변수 사용 방법

특정 카테고리의 게시물을 표시하려면 category_name 매개변수를 사용하면 됩니다. 예는 다음과 같습니다.

$query = new WP_Query( array( 'category_name' => 'WordPress' ) );

그러면 "직원" 카테고리와 하위 카테고리의 모든 게시물이 표시됩니다.

더 복잡한 예

이 예에서는 다양한 인수의 여러 값을 활용하여 원하는 정확한 게시물을 가져오는 복잡하고 사용자 정의된 쿼리를 만드는 방법을 보여줍니다.

특정 카테고리에 속하고, 특정 태그가 있고, 특정 작성자가 작성하고, 날짜별로 내림차순으로 정렬된 게시물을 검색합니다.

$args = array(
'category__in' => array(5, 10), // Categories with IDs 5 and 10
'tag__in' => array('featured', 'popular'), // Posts tagged with 'featured' or 'popular'
'author__in' => array(1, 2), // Authors with IDs 1 and 2
'orderby' => 'date', // Order by date
'order' => 'DESC', // In descending order
'posts_per_page' => 10 // Limit to 10 posts
);

$query = new WP_Query($args);

// The Loop
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Display post content
the_title('<h2>', '</h2>');
the_excerpt();
}
} else {
// No posts found
echo 'No posts found';
}

// Restore original Post Data
wp_reset_postdata();

  • Category__in : ID가 5와 10인 카테고리의 게시물을 원한다는 것을 지정하는 데 도움이 됩니다.
  • tag__in : 게시물에 '추천' 또는 '인기' 태그를 지정하도록 지정합니다.
  • author__in : ID 1과 2를 가진 작성자의 게시물을 원함을 지정합니다.
  • orderby : 게시물이 게시된 날짜를 기준으로 게시물을 정렬하도록 지정합니다.
  • order : 게시물을 내림차순(최신 항목부터)으로 지정합니다.
  • post_per_page : 검색되는 게시물 수를 10으로 제한합니다.

4. 메서드 및 클래스 속성을 사용하여 개체 수정

WordPress에서 WP_Query 데이터베이스에서 게시물을 검색하는 데 사용되는 특수 PHP 클래스입니다. 웹사이트에 표시하고 싶은 정확한 게시물을 얻는 데 도움이 되는 도구라고 생각하세요.

클래스 속성과 메서드란 무엇입니까?

PHP에서 클래스는 속성 (변수 등)과 메서드 (함수 등)를 가질 수 있습니다. 이를 이해하는 간단한 방법은 다음과 같습니다.

  • 속성 : 정보를 담는 컨테이너와 같습니다. WP_Query 와 관련하여 속성에는 게시물 목록이나 찾은 게시물 수와 같은 항목이 포함될 수 있습니다.
  • 방법 : 수행할 수 있는 도구나 작업과 같습니다. WP_Query 에서 메서드는 게시물이 있는지 확인하고, 게시물 제목을 가져오고, 쿼리를 재설정하는 데 도움이 될 수 있습니다.

속성을 직접 변경할 수 있나요?

아니요, 속성을 직접 변경할 수는 없습니다. 심지어 개발자도 이를 강력히 권장하지 않습니다. 그러나 대안으로 메소드를 사용할 수 있습니다.

방법은 올바른 길을 따르도록 도와주는 공식적인 도구나 명령과 같습니다. 이는 정확히 함수처럼 작동하는 것입니다. WP_Query의 메소드를 특정 변경하면 가져오는 데이터를 사용자 정의할 수도 있습니다.

WP_Query에서 메서드를 사용하는 예

이 예에서 Reset_postdata() 함수는 WP_Query 작성에 있어 중요한 단계가 될 수 있습니다. 이 방법은 $current_post 및 $post의 속성을 재설정합니다.

<?php
// Create a new query with specific arguments
$the_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 5,
'category_name' => 'news',
));
?>

<?php if ($the_query->have_posts()) : ?>
<!-- Display the posts -->
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<p><?php the_excerpt(); ?></p>
<?php endwhile; ?>
<!-- Reset the post data to avoid conflicts -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>

고장:
  • 쿼리 생성 :
    • $the_query = new WP_Query($args); : 제공한 인수를 사용하여 새 WP_Query 객체를 생성합니다.
  • 게시물 확인 중 :
    • if ($the_query->have_posts()) : 쿼리를 기반으로 표시할 게시물이 있는지 확인합니다.
  • 게시물 반복 :
    • while ($the_query->have_posts()) : $the_query->the_post(); : 게시물 데이터를 표시할 수 있도록 설정합니다.
  • 게시물 표시 :
    • the_title(); 그리고 the_excerpt(); : 현재 게시글의 제목과 발췌문을 표시합니다.
  • 게시물 데이터 재설정 :
    • wp_reset_postdata(); : 글로벌 포스트 데이터를 메인 쿼리의 포스트로 재설정합니다. 이는 페이지의 다른 부분을 엉망으로 만드는 것을 방지하는 데 중요합니다.

사용할 수 있는 일반적인 방법

쿼리 작업에 사용할 수 있는 WP_Query 의 몇 가지 일반적인 메서드는 다음과 같습니다.

  • get_posts :
    • 기능 : 게시물 목록을 검색합니다.
    • :php코드 복사 $posts = get_posts(array('category' => 'news'));
  • have_posts :
    • 기능 : 표시할 게시물이 있는지 확인합니다.
    • :php코드 복사 if ($the_query->have_posts()) { // There are posts to show }
  • the_post :
    • 기능 : 현재 게시물 데이터를 설정합니다.
    • :php코드 복사 $the_query->the_post();
  • fill_query_vars :
    • 기능 : 누락된 쿼리 세부정보를 완성합니다.
    • :php코드 복사 $the_query->fill_query_vars($args);

WP_Query에 올바른 정보를 제공하면 이를 사용자 정의하여 다양한 작업을 수행할 수 있습니다. 이 방법은 클래스 속성을 조정하는 유연하고 안전한 방법입니다.


WP_Query Vs query_posts(): 어느 것이 더 좋나요?

다음은 WordPress의 WP_Queryquery_posts() 의 자세한 비교표입니다. 여기에는 일반적으로 WP_Query query_posts() 보다 선호되는 이유를 이해하는 데 도움이 되는 몇 가지 주요 사항이 포함되어 있습니다.

특징 WP_쿼리 query_posts()
목적 데이터베이스에서 게시물을 검색하기 위한 사용자 정의 쿼리를 만듭니다. 페이지의 기본 쿼리를 수정합니다(일반 용도로는 권장되지 않음).
주요 용도 새로운 쿼리를 생성하고 게시물을 사용자 정의 방식으로 표시하는 데 이상적입니다. 일반적으로 기본 쿼리를 변경하는 데 사용되지만 권장되지는 않습니다.
권장 용도 예, 게시물을 가져오고 표시하는 데 권장되는 방법입니다. 아니요, 메인 루프, 플러그인, 테마 내에서는 이 기능을 사용하지 않는 것이 가장 좋습니다.
기본 쿼리에 미치는 영향 기본 쿼리에는 영향을 주지 않습니다. 기본 루프를 변경하지 않고도 사용자 정의 쿼리를 실행할 수 있습니다. 충돌이나 예상치 못한 결과가 발생할 수 있는 기본 쿼리를 완전히 재정의합니다.
게시물 데이터 재설정 사용자 정의 쿼리를 실행한 후 원래 쿼리를 복원하려면 wp_reset_postdata() 사용하세요. 동등한 기능이 없습니다. 즉, 기본 쿼리의 게시 데이터를 수동으로 복원해야 할 수도 있습니다.
여러 쿼리 처리 여러 쿼리를 처리할 수 있으며 복잡한 시나리오를 위해 설계되었습니다. 하나의 쿼리만 처리하고 기본 쿼리를 변경하므로 여러 쿼리에 문제가 될 수 있습니다.
성능에 미치는 영향 일반적으로 기본 쿼리를 변경하지 않으므로 성능이 더 좋습니다. 효율성이 떨어질 수 있으며 기본 쿼리에 미치는 영향으로 인해 문제가 발생할 수 있습니다.
사용자 정의 쿼리 예 $custom_query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 5)); query_posts(array('post_type' => 'post', 'posts_per_page' => 5));
데이터 재설정 예 <?php wp_reset_postdata(); ?> 재설정 기능이 없으며 기본 쿼리가 변경된 경우 수동 재설정이 필요합니다.
사용의 용이성 게시물과 페이지를 쿼리하기 위한 내장된 방법과 기능으로 사용하기 쉽습니다. 덜 간단하며 신중하게 사용하지 않으면 문제가 발생할 수 있습니다.
WP_Query 대 query_posts()

WPOven Dedicated Hosting

WP_Query 사용의 몇 가지 예

WP_Query와 실제 사용법을 더 잘 이해하려면 아래 예제 중 일부를 확인하세요.

1. 이번 주에 게시된 최신 게시물 보기

사용자 기반이 양호하거나 웹 트래픽 양이 적당하다면 방문자가 콘텐츠를 좋아하고 사이트에 게시된 최신 기사를 읽고 싶어한다는 의미입니다.

웹사이트를 디자인하는 동안 웹페이지의 전용 섹션에 최근 게시물을 표시할 수 있습니다. 다행히도 WP_Query를 사용하면 날짜 매개변수를 기반으로 게시물을 쉽게 찾을 수 있습니다. 방법을 살펴보겠습니다.

<?php
$arguments = array(
"date_query" => array(
array(
"year" => date( "Y" ),
"week" => date( "W" ),
)
)
);
$posts = new WP_Query($arguments);
?>

이 예에서는 이번 주에 게시된 게시물을 찾기 위해 WP_Query를 생성합니다. 우리는 검색 기준을 지정하기 위해 date_query 라는 WP_Query의 특별한 부분을 사용합니다.

쿼리의 주요 목적은 이번 주에 게시된 게시물을 찾는 것이었습니다. 이를 위해 date_query 매개변수를 사용하여 날짜를 기준으로 게시물을 검색했습니다. 날짜 관련 인수의 배열을 사용합니다.

따라서 date_query 매개변수를 맞춤설정하면 최근 게시된 게시물을 가져와 표시할 수 있습니다. 그러나 쿼리를 더욱 효과적으로 만들고 지난 주에 작성된 최신 기사를 강조 표시하기 위해 자유롭게 사용자 정의 값을 지정할 수도 있습니다.


2. 특정 카테고리의 최신 게시물 표시

웹 사이트 방문자는 종종 최신 정보를 찾고 참여도와 페이지 조회수를 높일 수 있으므로 그들이 좋아할 만한 관련 게시물을 더 제안하는 것이 좋습니다.

WordPress에서 관련 게시물을 연결하는 방법은 여러 가지가 있지만 WP_Query는 이를 수행하는 효율적인 방법 중 하나입니다. 특히 항상 최신 콘텐츠를 게시하는 웹사이트에 좋은 방법입니다.

예를 들어 누군가 WordPress 오류에 대한 기사를 읽는 경우 WP_Query는 다른 유사하고 최근 기사를 표시하는 데 도움이 될 수 있습니다.

따라서 특정 카테고리의 최신 게시물을 가져오려면 이 WP_query를 사용하고 사이트 정보를 포함하는 약간의 편집을 수행하세요.

<?php

// Get the current post id.
$current_post_id = get_the_ID();

// Get the current post's category (first one if there's more than one).
$current_post_cats = get_the_category();
$current_post_first_cat_id = $current_post_cats[ 0 ]->term_id;

// Setup arguments.
$args = array(
// Get category's posts.
'cat' => $current_post_first_cat_id,
// Exclude current post.
'post__not_in' => array( $current_post_id )
);

// Instantiate new query instance.
$my_query = new WP_Query( $args );

?>


3. 동일한 작성자, 동일한 카테고리의 게시물 표시

방문자가 귀하의 콘텐츠를 좋아한다면 작성자의 견해, 글쓰기 스타일 및 인식을 좋아할 가능성이 높습니다.

이를 위해 WP_Query를 사용하여 동일한 작성자가 작성한 유사한 게시물을 독자에게 제안할 수 있습니다. 쿼리는 현재 게시물과 동일한 카테고리에 대해 동일한 작성자가 작성한 게시물을 검색합니다.

이를 위해 비슷한 작성자와 동일한 카테고리의 게시물을 찾는 특정 WP_Query 문자열을 만들어야 합니다.

코드는 다음과 같습니다.

<?php
$arguments = array(
"author_name" => "Rahul",
"category_name" => "WordPress",
"posts_per_page" => 3,
);
$posts = new WP_Query($arguments);
?>

위 코드에서 "Rahul"을 작성자 이름으로 바꾸고 "WordPress"를 카테고리 이름으로 바꿔야 합니다.


4. 가장 인기 있는 게시물을 표시하세요.

독자들에게 표시한 최신 또는 최근 게시물과 같습니다. 독자들이 좋아하고 많이 참여하는 주제에 대한 게시물을 표시하고 싶을 수도 있습니다. 이를 달성하려면 orderby 매개변수를 사용하고 이를 comment_count 인수에 전달할 수 있습니다.

<?php
$arguments = array(
"category_name" => "WordPress Errors",
"orderby" => "comment_count",
"posts_per_page" => 5,
);
$posts = new WP_Query($arguments);
?>

위의 WP_Query는 "WordPress Errors" 카테고리의 게시물을 찾고 각 게시물의 댓글 수를 기준으로 결과를 필터링합니다.

출력에는 댓글이 가장 많은 5개의 게시물이 왼쪽에서 오른쪽으로 내림차순으로 표시되며 참여도가 가장 높은 게시물부터 시작하여 가장 낮은 게시물로 끝납니다.


결론

이제 WP_Query가 얼마나 강력한지, WordPress에서 데이터베이스 요청을 어떻게 쉽게 수행할 수 있는지 확인했습니다. 또한 사이트를 맞춤 설정할 수 있는 유연성을 제공하고 방문자에게 독특한 경험을 제공하세요.

WP_Query를 사용하려면 다음을 수행할 수 있습니다.

  • 루프 만들기: 게시물을 표시하세요.
  • 쿼리 인수 사용: 검색을 사용자 정의합니다.
  • 특정 매개변수 설정: 결과를 필터링합니다.
  • 클래스 속성 수정: 메서드를 사용하여 쿼리 결과를 조정합니다.

이 모든 기술을 익히면 인기도, 날짜 등 다양한 요소를 기반으로 특정 게시물을 쉽게 추천할 수 있습니다.

이 기술은 사용자의 참여도를 높이고, 사용자 경험을 향상시키며, 충성도 높은 방문자가 더 관련성 높은 콘텐츠를 찾는 데 도움이 됩니다.

WP_Query에 대해 여전히 의문점이 있거나 우리가 놓쳤을 수 있는 콘텐츠를 더 추가하고 싶다면. 아래 댓글 섹션을 통해 알려주시기 바랍니다.