안녕하세요. 린치핀소프트 한광희입니다.

과거 포스트 에서 워드프레스의 포스트 타입(Post Type)에 대해서 알아보았습니다.

그때 Custom Post Type이 워드프레스의 기본 구조에서 중요한 역할을 한다고 말씀드렸었습니다.

이번에는 Custom Post Type(사용자정의형 포스트 타입)을 프로그래밍 코드로 생성해보겠습니다.

 

아래는 프로그래밍 소스 예시입니다.

 

add_action('init','register_book_post');

function register_book_post(){

$labels = array(
'name' => __( '도서', 'linchpinbook' ),
'singular_name' => __( '도서', 'linchpinbook' ),
'menu_name' => __('도서', 'linchpinbook' ),
'name_admin_bar' => __( '도서', 'add new on admin bar', 'linchpinbook' ),
'add_new' => __( 'Add New 도서' ,'linchpinbook' ),
'add_new_item' => __( 'Add New 도서', 'linchpinbook' ),
'new_item' => __( 'New 도서', 'linchpinbook' ),
'edit_item' => __( 'Edit 도서', 'linchpinbook' ),
'view_item' => __( 'View 도서', 'linchpinbook' ),
'all_items' => __( 'All 도서', 'linchpinbook' ),
'search_items' => __( 'Search 도서', 'linchpinbook' ),
'parent_item_colon' => __( 'Parent 도서:', 'linchpinbook' ),
'not_found' => __( 'No 도서 found.', 'linchpinbook' ),
'not_found_in_trash' => __( 'No 도서 found in Trash.', 'linchpinbook' )
);

$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'book' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 0,
'supports' => array('title','revisions','thumbnail','editor'),
'can_export' => true,
'capability_type' => 'post',

);


register_post_type( 'book', $args );

}

 

위 소스코드는 “book”이라는 포스트타입을 선언해주고 워드프레스 시스템이 초기에 로드될때 “book”이란 CPT를 시스템에 생성해주는 기능을 합니다.

이때 중요한 워드프레스 코어 함수로는

add_action('init','함수 이름');

register_post_type('CPT 이름','CPT정보를 가진 배열');

입니다.

먼저 add_action()의 경우 시스템 초기화시에 호출해야하는 함수를 지정하는 액션 훅(Action Hook)입니다.

두번째 register_post_type()은 액션 훅에서 호출하는 함수에서 포스트타입을 생성/등록 하는 함수입니다.

위의 소스코드중 register_post_type은 $label이라는 배열을 통해 현재 생성하는 CPT의 이름등을 명기하는데, 각 CPT가 보여지는 메뉴나 위치에따라 이름을 각기 다르게 명명할수도 있습니다.

다음은 $label을 제외한 다른 Key Name에 대한 설명입니다.

$args = array(
'labels' => $labels,//방금 작성한 CPT의 명칭들에 대한 정보를 가지고잇는 $labels 배열을 할당합니다.
'public' => true,  // 이 항목은 현재의 CPT가 공개적으로 사용될지 안될지를 선택하는 항목으로 중요한 항목입니다. 이때 false를 하면 "revision"이나 "nav_menu_item"처럼 관리자화면과 각종검색시스템에서 제외됩니다.true를 선택하면 우리가 사용하는 포스트(글)과 페이지처럼 관리자화면에서 노출될 뿐만 아니라 검색에서도 허용됩니다.이 항목에 따라 아래의 'publicly_queryable','show_ui','show_in_nav_menus','exclude_from_search'의 기본값이 정해집니다.
'publicly_queryable' => true
'show_ui' => true, 
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'book' ), //CPT의 Slug 이름을 지정합니다.
'capability_type' => 'post', // 해당 CPT는 워드프레스 고유의 포스트타입인 post를 기반합니다.
'has_archive' => true, // 현재 CPT가 아카이브 페이지를 가지는지에 대해서입니다.
'hierarchical' => false,// 페이지와 같은 계층구조를 가지는지에 대한 항목입니다.저는 false를 입력하여 지원하지 않게하였습니다.
'menu_position' => 0, // 관리자의 좌측 menu bar에서의 위치를 정합니다.5를 입력하면 "포스트(글)"아래에 CPT의 메뉴가 위치하며, 0을 입력하면 "글(포스트)"의 위에 위치하여 관리자 메뉴중에서도 상단에 위치하게 됩니다.
'supports' => array('title','revisions','thumbnail','editor'), //현재 CPT가 지원해야하는 기본기능들입니다.Book CPT는 제목,리비전,특성 이미지,포스트 본문을 허용해야한다고 설정하였습니다.
'can_export' => true,

);

 

위의 소스코드를 현재 활성화된 테마(theme)의 functions.php에 입력하고 워드프레스 관리자 페이지에 접속해보면 아래의 스크린샷처럼 “도서”라는 이름을 가진 Book CPT가 생성되었고 “글(포스트)”위의 최상단에 메뉴가 위치되어 있습니다.

저는 추가적으로 Book CPT에 택소노미를 4개 더 추가하여 데이터에 대해서 쉽게 구분 및 정리할수 있도록 보완하였습니다.

screenshot-52.68.215.28 2015-08-11 08-56-47