프로그래밍

[워드프레스] 페이지에 요약글, 태그, 카테고리 기능 추가하기

📈 0

상황

[[워드프레스]]에서 포스트와 [[페이지]]는 분명 다른 기능을 하지만, 페이지 형식으로 글을 쓰면서 가끔은 포스트에 있는 카테고리, 태그 등의 기능이 필요할 때가 있습니다.

그럴거면 굳이 왜 post 가 아닌 page 형식으로 글을 작성할까 하는 의문점이 생기지만, 어쨌든 제가 필요했기에 그 방법을 정리해 봅니다.

솔루션

아래는 페이지 형식의 글에 포스트 형식이 지원하는 몇 가지 기능을 아래 그림처럼 추가하는 방법을 정리한 것입니다.

아래 코드를 워드프레스 테마의 [[functions.php]] 파일이나 플러그인에 추가하면 페이지에서 여러가지 추가 기능을 사용할 수 있습니다.

// 페이지에 요약글 기능 추가
add_post_type_support( 'page', 'excerpt' );

// 페이지에 태그 기능 추가하기
function _tag_for_page() {
    register_taxonomy_for_object_type( 'post_tag', 'page' );
}
add_action('init', '_tag_for_page');

function _page_on_tag_page( $wp_query ) {
    if ( $wp_query->get('tag') ) $wp_query->set('post_type', 'any');
}
add_action('pre_get_posts', '_page_on_tag_page');

// 페이지에 카테고리 기능 추가하기
function _cat_for_page() {
    register_taxonomy_for_object_type( 'category', 'page' );
}
add_action('init', '_cat_for_page'); 

function  _page_on_cat_page( $wp_query ) {
    if ( $wp_query->get('cat') ) $wp_query->set('post_type', 'any');
}
add_action('pre_get_posts', '_page_on_cat_page'); 

코드가 뭔가 길어 보이긴 하는데 본인에게 필요한 부분만 가져다 쓰면 됩니다.

아래에서 각 코드가 어떤 기능을 하는지 살펴 보도록 합시다.

요약글 기능 추가

// 페이지에 요약글 기능 추가
add_post_type_support( 'page', 'excerpt' );

페이지에 [[요약글]] 기능을 추가하는 것은 아주 간단히 코드 한 줄이면 됩니다.

[[add_post_type_support]] 함수를 이용해 page 형식의 post type 에 [[excerpt]] 기능을 추가하는 작업입니다.

태그 기능 추가

// 페이지에 태그 기능 추가하기
function _tag_for_page() {
    register_taxonomy_for_object_type( 'post_tag', 'page' );
}
add_action('init', '_tag_for_page');

function _page_on_tag_page( $wp_query ) {
    if ( $wp_query->get('tag') ) $wp_query->set('post_type', 'any');
}
add_action('pre_get_posts', '_page_on_tag_page');

_tag_for_page 함수는 [[register_taxonomy_for_object_type]] 함수를 이용해 page 에 [[post_tag]] 기능을 추가해주는 함수입니다.

그런데 단순히 페이지 형식의 글에 태그 기능을 추가 하는게 아니라 특정 태그를 포함한 글 목록에서도 해당 페이지를 보고 싶다면 그 아래의 _page_on_tag_page 함수까지도 추가해야 합니다. [[pre_get_posts]] 에 액션을 추가해 글 목록을 불러 올 때 post_type 이 어떤 것(any)이 더라도 불러 올 수 있도록 하는 작업입니다.

카테고리 기능 추가

// 페이지에 카테고리 기능 추가하기
function _cat_for_page() {
     register_taxonomy_for_object_type( 'category', 'page' );
}
add_action('init', '_cat_for_page'); 

function  _page_on_cat_page( $wp_query ) {
   if ( $wp_query->get('cat') ) $wp_query->set('post_type', 'any');
}
add_action('pre_get_posts', '_page_on_cat_page'); 

태그 기능을 추가 하는 것과 마찬가지 작업입니다. _cat_for_page 함수에서 page 에 category 기능을 추가해주고, [[query]] 가 cat 일 때 [[post_type]] 을 any 로 지정해 페이지도 특정 카테고리 글 목록에서 표시 될 수 있도록 합니다.

끝.