본문 바로가기

디지털노마드/WordPress 강좌

CPT (Custom Post Types) 만들기

커스텀 포스트 타입은 페이지 구분을 할때 일반 페이지와 글 포스트로 구분 할 수 있는데,  아래와 같은 구분을 생각하고 작업하면 도움이 됩니다. 쉽게 말해 블로그글은 포스트, 일반 페이지는 페이지로 구분할 수 있습니다. 

커스텀 포스트 유형

  • 게시물 또는 페이지 역할을 할 수 있습니다.
  • 카테고리, 태그 또는 사용자 지정 분류별로 구성
  • 인덱스 페이지를 분리해서 사용하고 사용자 지정 템플릿을 가질 수 있습니다.
  • 표준 기능을 모두 포함하거나 조합하거나 포함하지 않을 수 있습니다.
  • WP_Query ()를 사용하여 사용자 정의 루프를 사용하여 사이트 어디에서나 표시 할 수 있습니다.

커스텀 페이지 등록 코드와 등록방법

커스텀 페이지 등록코드 

register_post_type( string $post_type, array|string $args = array() )

 

1. function.php에 아래와 같은 코드를 등록합니다. function 이름을 만들어서 등록해주세요.  

 

function your_descriptive_function_name() {

$args = array( 'public' => true, 'label' => 'Name' );

register_post_type( 'name', $args );

} add_action( 'init', 'your_descriptive_function_name' );

2. setting->permalinks를 다시한번 저장해주어야합니다. 

3. 아래와 같이 등록된 CPT 카테고리가 보입니다. 

4. 앞에서 만들어준 커스텀 페이지에 카테고리를 더하기 위해 inc 폴더안에 데이터 생성 파일(cpt-taxonomy.php) 을 만듭니다. 그리고 function.php에 링크를 걸어줍니다.

 

커스텀 페이지 등록 코드와 등록방법 2

1. 이번에는 앞에서 만든 코드에 데이터를 다양하게 부르기 위해 taxonomy를 사용해 봅시다. 먼저 앞에서 function.php 에 만든 코드를 삭제합니다. 그리고 cpt-taxonomy.php에 아래와 같은 코드를 넣읍시다.

<?php

function zb_register_custom_post_types() {

 

// Register Works

$labels = array(

'name' => _x( 'Works', 'post type general name' ),

'singular_name' => _x( 'Work', 'post type singular name'),

'menu_name' => _x( 'Works', 'admin menu' ),

'name_admin_bar' => _x( 'Work', 'add new on admin bar' ),

'add_new' => _x( 'Add New', 'work' ),

'add_new_item' => __( 'Add New Work' ),

'new_item' => __( 'New Work' ),

'edit_item' => __( 'Edit Work' ),

'view_item' => __( 'View Work' ),

'all_items' => __( 'All Works' ),

'search_items' => __( 'Search Works' ),

'parent_item_colon' => __( 'Parent Works:' ),

'not_found' => __( 'No works found.' ),

'not_found_in_trash' => __( 'No works found in Trash.' ),

'archives' => __( 'Work Archives'),

'insert_into_item' => __( 'Insert into work'),

'uploaded_to_this_item' => __( 'Uploaded to this work'),

'filter_item_list' => __( 'Filter works list'),

'items_list_navigation' => __( 'Works list navigation'),

'items_list' => __( 'Works list'),

'featured_image' => __( 'Work feature image'),

'set_featured_image' => __( 'Set work feature image'),

'remove_featured_image' => __( 'Remove work feature image'),

'use_featured_image' => __( 'Use as feature image'),

);

 

$args = array(

'labels' => $labels,

'public' => true,

'publicly_queryable' => true,

'show_ui' => true,

'show_in_menu' => true,

'show_in_nav_menus' => true,

'show_in_admin_bar' => true,

'show_in_rest' => true,

'query_var' => true,

'rewrite' => array( 'slug' => 'works' ),

'capability_type' => 'post',

'has_archive' => true,

'hierarchical' => false,

'menu_position' => 5,

'menu_icon' => 'dashicons-archive',

'supports' => array( 'title', 'thumbnail', 'editor' ),

);

 

register_post_type( 'zb-work', $args );

 

}

add_action( 'init', 'zb_register_custom_post_types' );

2. 새로생성한 Work CPT 안에 원하는 포스트를 2~3개 만들어 봅시다. 각 페이지에 feature image를 정해줍니다.

페이지 편집창

 

 

 

3. 구분 할 수 있도록 각각 Slug 이름을 맞춰줍니다. 

 

4. 커스텀 페이지 파일을 만들면 Settings -> Permalink 를 저장해줍니다. 하지만, 그 작업을 계속 하지 않아도 되도록 하려면 아래와 같은 코드를 넣습니다. 사용자가 "영구 링크 저장"을 클릭 할 필요가 없도록 테마를 활성화 할 때 다시 쓰기 규칙을 비우기 위해 register_post_type () 함수에 필요합니다. register_post_type ()을 포함하는 함수 바로 뒤에 삽입합니다.

 

앞에서 만든 cpt-taxonomy.php 파일에 아래 코드를 추가 입력합니다.


function
 zb_rewrite_flush() {

ms_register_custom_post_types(); flush_rewrite_rules();

}
 add_action( 'after_switch_theme', 'zb_rewrite_flush' );

5. 메뉴에 앞에서 만든 커스텀 페이지들을 추가 해줍니다. 프론트 페이지에서 보면 아래와 같은 메뉴가 보이도록 설정해 주면 됩니다.