상현
개발 덕후

워드프레스 게시물 사용자 정의 상태 만들기

( 업데이트: )

워드프레스에서는 기본적으로 8개의 상태가있다 하지만 워드프레스를 사용하면서 포스트를 사용하는 목적이 다른 독자적인 목적이 있다면 새로운 상태가 필요 할 수도 있다.

워드프레스의 기본 상태는

  • Publish – 모두가 볼 수 있습니다
  • Future – 스게줄에 설정된 날짜에 게시될 예정입니다
  • Draft – 아직 완료되지 않았으며 권한이 있는 사람들이 볼 수 있는 게시물 입니다
  • Pending – 게시할 권한이 있는 사용자를 기다리고 있습니다
  • Private – 관리자 수준의 사용자만 볼 수 있습니다
  • Trash – 삭제된 게시물
  • Auto Draft – 편집 과정에서 WordPress에 의해 자동 생성된 게시물
  • Inherit – 첨부 파일과 같은 종속 게시물과 함께 사용

functions.php를 사용하여 커스텀 상태 등록

// 게시물 사용자 정의 상태 등록
function register_custom_post_status(){
    register_post_status( 'In Writing', array(
        'label'                     => _x( 'In Writing', 'post' ),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'In Writing <span class="count">(%s)</span>', 'In Writing <span class="count">(%s)</span>' ),
    ) );
}
add_action( 'init', 'register_custom_post_status' );Code language: PHP (php)

기본 옵션을 설정하여 ‘waiting’ 상태를 등록하였습니다.

기본 사양에서 게시물 상태 캡션을 적용하였으며 게시물의 가시성을 제어하기 위해 exclude_form_search => false로 비활성화했습니다.

워드프레스 관리자 편집화면에서 post status 표시하기

게시물을 편집할때 상태 드롭다운에 새로 생성된 게시물 상태 옵션을 추가하는 스크립트

// 게시물 편집화면에서 사용자 지정 상태 옵션을 표시합니다
function display_custom_post_status_option(){
    global $post;
    $complete = '';
    $label = '';
    if($post->post_type == 'post'){
        if($post->post_status == 'in-writing'){
            $selected = 'selected';
        }
echo '<script>
$(document).ready(function(){
$("select#post_status").append("<option value=\"in-writing\" '.$selected.'>In Writing</option>");
$(".misc-pub-section label").append("<span id=\"post-status-display\"> In Writing</span>");
});
</script>
';
    }
}
add_action('admin_footer', 'display_custom_post_status_option');Code language: PHP (php)

플러그인

커스텀 상태만 등록한다고하면 위 코드보다는 아주 심플한 플러그인을 설치해서 사용합니다.

https://wordpress.org/plugins/extended-post-status/

  • https://phppot.com/wordpress/creating-custom-post-status-in-wordpress/