18. 데이터베이스와 커스텀 데이터 처리, WP Query를 사용한 커스텀 데이터 불러오기

워드프레스는 데이터베이스 중심의 CMS(Content Management System)으로, 데이터베이스를 활용하여 포스트, 사용자, 댓글, 설정 등 다양한 데이터를 관리합니다. 이 글에서는 워드프레스에서 커스텀 데이터를 처리하는 방법과 `WP_Query`를 사용하여 원하는 데이터를 효율적으로 불러오는 방법을 알아보겠습니다.

1. 데이터베이스 이해하기

워드프레스는 기본적으로 MySQL 데이터베이스를 사용하여 데이터를 저장합니다. 기본 테이블 구조는 다음과 같습니다:

  • wp_posts: 포스트 및 페이지 데이터 저장
  • wp_users: 사용자 정보 저장
  • wp_comments: 댓글 데이터 저장
  • wp_options: 사이트 설정 정보 저장
  • wp_postmeta: 포스트에 대한 추가 메타데이터 저장

1.1 데이터베이스 테이블 구조

각 테이블은 여러 가지 필드를 정의하고 있으며, 그 중에서도 특히 주의해야 할 것은 wp_postmeta 테이블입니다. 이 테이블은 포스트에 대한 추가적인 정보를 저장하는 데 사용됩니다. 커스텀 필드를 추가하려면 이 테이블에 새로운 메타키와 메타값을 삽입하면 됩니다.

2. 커스텀 데이터 추가하기

커스텀 데이터를 추가하기 위해서는 포스트 메타(metadata)를 사용하여 원하는 정보를 저장할 수 있습니다. 이를 위해 `add_post_meta()`, `update_post_meta()`, `get_post_meta()` 함수를 사용할 수 있습니다.

2.1 포스트 메타 추가 예제


$post_id = 1; // ID of the post
$meta_key = 'custom_field';
$meta_value = 'This is a custom value';

// 메타 추가
add_post_meta($post_id, $meta_key, $meta_value);

2.2 포스트 메타 업데이트 예제


// 메타 업데이트
update_post_meta($post_id, $meta_key, 'Updated custom value');

2.3 포스트 메타 불러오기 예제


// 메타 불러오기
$custom_value = get_post_meta($post_id, $meta_key, true);
echo $custom_value; // "Updated custom value"

3. WP_Query를 이용한 데이터 불러오기

`WP_Query` 클래스는 특정 기준에 따라 포스트를 쿼리할 수 있는 강력한 도구입니다. 커스텀 데이터와 메타 데이터를 쿼리할 때 특히 유용합니다.

3.1 WP_Query 기본 사용법


$args = array(
    'post_type' => 'post', // 포스트 타입
    'posts_per_page' => 10, // 불러올 포스트 개수
);

$query = new WP_Query($args);

// 포스트 루프 시작
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        the_title('

', '

'); // 포스트 제목 출력 the_content(); // 포스트 내용 출력 } } else { echo '포스트가 없습니다.'; } // 포스트 루프 종료 wp_reset_postdata(); // 쿼리 리셋

3.2 커스텀 메타 데이터로 필터링하기

커스텀 메타 데이터를 기반으로 포스트를 필터링하고 불러오려면 meta_keymeta_value를 사용할 수 있습니다.


$args = array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'custom_field', // 메타 키
            'value' => 'This is a custom value', // 메타 값
            'compare' => '=', // 비교 연산자
        ),
    ),
);

$query = new WP_Query($args);

// 포스트 루프 시작
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        the_title('

', '

'); // 포스트 제목 출력 the_content(); // 포스트 내용 출력 } } else { echo '조건에 맞는 포스트가 없습니다.'; } wp_reset_postdata(); // 쿼리 리셋

4. 다양한 WP_Query 옵션

`WP_Query` 클래스는 다양한 인자를 허용하여 커스터마이징할 수 있습니다. 아래는 유용한 몇 가지 인자입니다.

  • orderby: 정렬 기준. 예: ‘date’, ‘title’, ‘rand’
  • order: 정렬 순서. ‘ASC’ 또는 ‘DESC’
  • post_status: 포스트 상태. ‘publish’, ‘draft’, ‘pending’
  • tax_query: 특정 분류법(Taxonomy)에 따라 필터링

4.1 정렬 및 상태 필터링 예제


$args = array(
    'post_type' => 'post',
    'orderby' => 'date', // 날짜 기준 정렬
    'order' => 'DESC', // 내림차순
    'post_status' => 'publish', // 게시된 포스트만 불러오기
);

$query = new WP_Query($args);

// 루프 시작
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        the_title('

', '

'); the_content(); } } wp_reset_postdata();

4.2 Taxonomy를 이용한 필터링 예제

특정 분류법에 따라 포스트를 필터링할 수도 있습니다.


$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'category', // 분류법
            'field' => 'slug', // 슬러그로 검색
            'terms' => 'my-category', // 분류 슬러그
        ),
    ),
);

$query = new WP_Query($args);

// 루프 시작
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        the_title('

', '

'); the_content(); } } wp_reset_postdata();

5. 결론

워드프레스에서 데이터베이스와 커스텀 데이터를 효과적으로 처리하고 불러오기 위해서는 WP_Query 클래스를 잘 활용해야 합니다. 커스텀 메타데이터와 다양한 쿼리 옵션을 사용하여 원하는 데이터를 효율적으로 얻을 수 있습니다. 이러한 기술은 특히 데이터가 많이 쌓이는 복잡한 사이트에서 유용하며, 사용자 맞춤형 정보를 제공하는 데 큰 도움을 줍니다.

이번 강좌를 통해 데이터베이스 처리와 커스텀 데이터 접근 방법에 대해 많은 정보를 얻으셨기를 바랍니다. 다음 시간에는 더 심화된 주제로 돌아오겠습니다!