이 포스트는 커스텀 포스트의 관리 UI(admin UI)와 관련된 옵션을 다룬다. 목록은 아래와 같다.
- public
- show_ui
- show_in_nav_menus
- show_in_menu
- show_in_admin_bar
- menu_position
- menu_icon
- supports
- register_meta_box_cb
public 옵션은 관리 UI 관련 옵션에도 관여하지만 가시성 관련 옵션에도 관계가 있다. 해당 포스트에서 확인할 수 있다. 전체 옵션은 이 포스트에서 확인할 수 있다.
public이 true이면 show_in_hav_menus, show_ui 옵션이 true. 반대로 false이면 모두 false로 설정된다.
show_ui
포스트 타입을 관리하는 기본 UI를 제공할지를 결정한다. 기본적인 포스트의 목록 확인, 생성, 편집 UI를 재활용할 수 있다. 이 UI는 다음과 같은 URL 패턴을 따라 제공된다.
<site_url>/wp-admin/edit.php?post_type=<post_type> // 목록 <site_url>/wp-admin/edit.php?post=<post_id>&action=edit // 편집 <site_url>/wp-admin/post-new.php?post_type=<post_type> // 추가
이 패턴 대로 URL을 입력하는 경우 위 그림처럼 익숙한 UI를 만날 수 있다. 만일 show_ui가 false이면 아래 그림처럼 권한이 없다는 메시지를 만날 수 있다.
show_in_nav_menus
이 옵션은 기본값으로 public 옵션 값을 따라 간다. 이 값이 true이면 외모(appearance) > 메뉴(menus) 항목에서 커스텀 포스트 항목을 메뉴로 선택할 수 있게 된다.
show_in_menu
관리자 화면에 포스트 타입에 관한 메뉴를 출력할지 결정한다. show_ui는 반드시 true여야 한다.
이 옵션은 true/false, 혹은 문자열을 가질 수 있다.
true이면 관리자 화면에서 메뉴를 출력한다. 반대로 false면 관리자 화면에 메뉴는 출력하지 않지만 목록, 삽입, 편집의 URL을 알면 UI에 접근은 가능하다.
문자열은 이미 워드프레스에 등록된 메뉴 슬러그를 대상으로 한다. 예를 들어 ‘글’ 메뉴는 post.php이다. 워드프레스의 기본 메뉴 슬러그의 예를 들면:
- 글 (posts): edit.php
- 미디어 (media): upload.php
- 페이지 (pages): edit.php?post_type=page
- 댓글 (comments): edit-comments.php
- 외모 (appearance): themes.php
- 플러그인 (plugins): plugins.php
- 사용자 (users): users.php
- 도구 (tools): tools.php
- 설정 (settings): options-general.php
이렇게 메뉴 슬러그를 입력하면 그 메뉴의 하위 메뉴에 해당 개체의 관리 UI 항목이 삽입된다. 아래 그림은 플러그인 메뉴에 HackPosts 관리 메뉴를 삽입한 예이다.
show_in_admin_bar
어드민 바는 워드프레스에 로그인하면 생기는 화면 상단의 관리용 UI이다. 전단부(frontend) 및 관리자 화면 양측에 둘다 나오므로 보다 편리하게 관리 명령을 사용할 수 있다.
여기에 “+ 새로 추가 (+ New)” 버튼을 누르면 글, 페이지, 사용자를 쉽게 추가할 수 있다. 이 옵션이 true일 경우 해당 개체를 새로 추가할 수 있는 메뉴를 여기에 등록해 준다.
기본값은 show_ui 옵션값을 따라 간다.
menu_position
메뉴의 위치를 설정한다. 정수로 입력하는데, 기본값인 null로 입력하면 댓글 아래에 메뉴가 삽입된다. PHP는 타입 저글링이 일어나 이 값을 문자열 형태로 입력해도 될 것 같지만, 실제로 해 보면 진짜 “정수형”만 가능하다는 점에 유의한다. 정수형이 아니면 기본값과 같게 동작하게 된다.
$args = array( .... 'menu_position' => 65, // ok // 'menu_position' => "65", // wrong .... ); register_post_type( 'wphack', $args );
코덱스에서 수치에 대한 가이드라인을 참고할 수 있다.
menu_icon
메뉴 아이콘을 지정할 수 있다. 아이콘의 URL이나 dashicon id를 입력해 주면 된다. Dashicon 페이지에 들어가면 아래처럼 화면이 나온다.
여기서 사용하고 싶은 아이콘을 클릭한다. 예를 들어 ‘Admin menu’의 가장 처음 보이는 아이콘을 클릭하면 그림처럼 아이콘이 크게 보인다. 붉은색 사각형으로 하이라이트한 문자열을 여기에 적으면 원하는 아이콘을 메뉴 아이콘으로 지정할 수 있다.
$args = array( .... 'menu_icon' => 'dashicons-menu', .... ); register_post_type( 'wphack', $args );
supports
개체의 작성, 편집 화면에서 어떤 개체 작성 도구를 기본으로 지원할지 선택할 수 있다. 값으로 false나 배열을 입력할 수 있다.
false를 입력한 경우 어떤 작성 도구도 선택하지 않을 때 쓴다. 단, 기본 메타 박스인 ‘Publish’는 사라지지 않는다. 배열의 경우 아래의 항목을 입력 가능하다.
title
제목(post_title)을 편집할 수 있는 UI를 제공한다.
editor
본문 편집기를 그대로 재활용할 수 있다.
author
작성자를 변경할 수 있다.
thumbnail
특성 이미지(featured image)를 선택할 수 있다. 테마에서 지원해야 한다.
excerpt
요약글을 작성할 수 있다.
custom-fields
사용자 정의 필드(커스텀 필드 또는 메타 필드)를 직접 수정할 수 있다. 키와 값이 그대로 출력되는 형태라 편집하기 직관적인 형태는 아니다. 주의할 점은, 직렬화된(serialized) 값은 이 목록에 포함되지 않는다. 예를 들어 아래 코드처럼 array를 serialize 시킨 것이라면 목록으로 출력되지 않는다. 개발하면서 가끔 착각할 수도 있으니 참고하도록 하자.
comments
토론(discussion)관련 메타 박스를 출력하거나, 편집 화면에서 댓글(comments) 메타 박스를 출력해 댓글 관리를 할 수 있게 한다.
revisions
개정판(revisions) 목록을 조회할 수 있는 메타박스를 보여 준다. 개정판 목록은 함부로 수정할 수 없다. 혹시 너무 많은 개정판이 문제라면 별도의 워드프레스 최적화 플러그인을 설치해서 이를 제거해 주거나 wp-config.php 파일을 수정해 주어야 한다.
page-attributes
페이지의 속성을 지정해 주는 메타 박스를 출력한다.
상위(Parent) 항목은 커스텀 포스트의 다른 옵션인 ‘hierarchical’이 true인 경우에 출력된다. Order의 경우 테이블의 menu_order 값과 연결되는데, 이 값은 개체 목록 출력시 별도의 정렬 순서를 지정해 줄 수 있다. 예를 들어 다음과 같이 menu_order 값을 지정해 주었다.
포스트 목록의 기본 순서가 그대로 정렬되어 나온다. 전단부에서 아카이브 페이지로 접근해도 이 순서는 동일하다.
post-formats
포스트 포맷은 워드프레스 3.1에서부터 지원하는 테마 기능이다. 코덱스에서는 대략적인 가이드라인을 줄 뿐, 각 포맷을 처리하는 방식은 전면적으로 테마에게 달려 있다. 아래에 항목에 대한 간략한 설명을 추가했다.
- 추가정보 (aside): 올바른 번역인지는 잘 모르겠다. 페이스북과 같은 제목이 없이 콘텐츠만 나열하는 스타일로 사용된다.
- 이미지 (image): 이미지를 위한 포스트 스타일. 첫번째 img 태그의 이미지가 해당 이미지로 간주된다. 포스트 본문에 URL 하나만 있을 수도 있는데, 그러면 그 이미지를 사용하며 이미지의 title 태그는 포스트 제목으로부터 온다.
- 비디오 (video):비디오 혹은 비디오 재생 목록 스타일. 첫번째 video 태그나 object/embed 태그를 해당 비디오로 생락한다. 비디오와 마찬가지로 URL 하나만 있을 수도 있다.
- 인용 (quote): 인용에 관한 콘텐츠를 설정하는 경우이다. 이 때 제목은 인용의 출처나 인용구의 저자 정보를 담을 수 있다.
- 링크 (link): 다른 사이트로의 링크를 기록하는 스타일이다. 처음 <a href=”” 태그가 외부로의 링크를 의미한다. 이미지와 마찬가지로 포스트 본문에 URL 하나만 놓을 수 있는데 이 때 포스트 제목을 이 링크의 제목으로 설정한다.
- 갤러리 (gallery): 이미지의 모음 스타일. 포스트의 내용으로 갤러리 쇼트코드를 가지고 있고 이미지 첨부 파일을 가지고 있을 수 있다.
- 상태 (status): 트위터 스타일로 짧은 글을 작성하는 스타일이다.
- 오디오 (audio): 팟캐스트 같은 오디오 파일 및 재생 목록 스타일이다.
- 채팅 (chat): 채팅 목록 스타일.
예를 들어, twentysixteen 테마에서 포스트 포맷을 걸어 보면 이렇게 나온다.
표준 포맷
추가정보(aside) 포맷
상태 (status) 포맷
register_meta_box_cb
개체에 대한 세부적인 인터페이스를 위해 메타 박스를 추가할 수 있다. 포스트 타입을 설정하면서 메타 박스를 디자인하기 위한 콜백 함수를 값으로 입력하면 된다.
$args = array( .... 'register_meta_box_cb' => 'wphack_meta_boxes', .... ); register_post_type( 'wphack', $args ); function wphack_meta_boxes() { .... }
위 코드 예제처럼 콜백 함수를 등록하면 된다. wphack_meta_boxes() 함수 내에서 remove_meta_box()나 add_meta_box()를 불러 메타 박스를 편집하면 된다.
예를 들어 기본적으로 삽입되는 슬러그(slug) 메타 박스를 삭제하고 싶다면 아래 코드를 삽입하면 된다.
remove_meta_box( 'slugdiv', $post_type, 'normal' );
한편 워드프레스에서는 해당 개체에 대해 읽기만을 허용하고 싶을 때에는 공개하기(Publish) 메타박스가 오히려 껄끄러울 것이다. 아래 코드처럼 사용해서 이를 삭제할 수 있다.
remove_meta_box( 'submitdiv', $post_type, 'side' );
이렇게 하면 슬러그와 발행하기 메타 박스는 화면에서 사라진다.
마치며
관리 UI 옵션은 커스텀 포스트의 여러 요소 중 관리자 화면에서 나타낼 유저 인터페이스와 관련 깊은 옵션들만 따로 모아 내가 임의로 그룹화한 것이다. 관리 화면 UI 관련 옵션인 만큼 워드프레스 관리자와 가장 밀접한 부분일 것이라 생각한다. 사용하는 목적에 따라 적절한 파라미터 값을 찾아 사용하기를 바란다.