WordPress의 사용자 정의 게시물 유형 기능 및 역할

우리는 종종 다양한 목적을 위해 사용자 정의 포스트 유형을 사용합니다. 모든 WordPress 플러그인 개발자가 이 기능을 좋아한다고 생각합니다. 그러나 WordPress 개발에서 비교적 새로운 우리 중 많은 사람들은 아마도 사용자 정의 기능과 잠재력을 인식하지 못할 것입니다. 이 기사에서는 사용자 정의 포스트 유형 기능에 대해 설명하려고 합니다.

맞춤 포스트 유형에 새로운 기능을 사용하는 이유



질문의 핵심은 기본값 대신 새 기능을 사용해야 하는 이유입니다. 답은 간단합니다. 다양한 사용자에 대한 정확한 제어가 필요할 때마다 맞춤형 기능이 필요합니다. 예를 들어 플러그인에 사용자 정의 게시물 유형이 있고 특정 작업을 다른 사용자에게 배포하려는 경우 사용자 정의 기능이 필요합니다.

게시물 유형book이 있고 저자만 책을 만들고 편집할 수 있다고 가정해 보겠습니다. 나는 작성자에게만 사용자 정의 기능을 할당합니다. 사용자 역할과 기능을 사용자 정의하는 데 사용할 수 있는 훌륭한 플러그인이 있습니다. "User Role Editor "이라고 합니다. 기본적으로 WordPress는 "admin", "editor", "author"등과 같은 사용자 역할을 기반으로 기능을 할당합니다. 사용자 역할 기반 기능에 대해 알아보려면 get_role() 기능을 사용하십시오.

새로운 기능을 만드는 방법



이제 잠재력을 이해했으므로 어떻게 생성할 수 있는지 봅시다. 플러그인에 새 게시물 유형을 등록할 때 사용자 정의 기능을 정의할 수 있습니다.

커스텀 포스트 타입은 register_post_type() 함수와 init 액션 훅으로 등록해야 합니다. 예를 들어 사용자 지정 기능이 있는 book 게시물 유형을 등록해 보겠습니다.

function book_post_type() {
    $args = array(
        'public'          => true,
        'label'           => __( 'Books', 'textdomain' ),
        'menu_icon'       => 'dashicons-book',
        'show_in_rest'    => true,
        'taxonomies'      => array( 'category' ),
        'capability_type' => array('book','books'), //custom capability type
        'map_meta_cap'    => true, //map_meta_cap must be true
    );
    register_post_type( 'book', $args );
}
add_action( 'init', 'book_post_type' ); //action hook

눈치채셨다면 'capability_type' => array('book','books') 포스트 유형에 대한 새로운 기능 유형을 생성할 book를 사용했습니다. 사용자 정의 포스트 유형에 'map_meta_cap' => true,를 사용하는 것도 중요합니다. 설정하지 않으면true WordPress에서 새 기능을 매핑할 수 없습니다. 기본 기능 키는 -

/**
 * Default capability type keys
 * Will be mapped with our types which are "book"(singular), "books"(plural)
 */

[edit_post]              => edit_book
[read_post]              => read_book
[delete_post]            => delete_book
[edit_posts]             => edit_books
[edit_others_posts]      => edit_other_books
[publish_posts]          => publish_books
[read_private_posts]     => read_private_books
[delete_posts]           => delete_books
[delete_private_posts]   => delete_private_books
[delete_published_posts] => delete_published_books
[delete_others_posts]    => delete_others_books
[edit_private_posts]     => edit_private_books
[edit_published_posts]   => edit_published_books

제한 사항



이제 이 시점에서 WordPress는 로그인한 사용자에 대한 사용자 정의 게시물 유형(도서)을 표시하지 않습니다. 이것은 보안을 위한 것입니다. 새로운 기능을 추가했으므로 WordPress에 이러한 기능이 있는 사용자를 알려야 합니다.

관리자를 위해 새로 추가된 기능 추가



관리 사용자는 모든 기본 기능이 할당된 최상위 수준에 있습니다. 따라서 관리 사용자는 모든 사용자 지정 기능도 가지고 있어야 합니다. 효율적인 방법으로 해보자.

역할 기반 기능은 WP_Role::add_cap( string $cap ) 기능으로 추가할 수 있습니다. 플러그인 또는 테마 활성화 시 이 기능을 연결하는 것이 중요합니다. 더 나은 코드 관리를 위해 클래스 기반 정적 메서드를 사용할 것입니다. 메인 플러그인 파일에 다음 코드를 추가해야 합니다.

// add custom capabilities to the admin on plugin activation
register_activation_hook( __FILE__, array( 'Admin_Roles', 'add_admin_capabilities' ) );

관리자 역할의 기본 클래스



/**
 * Main class for ADMINISTRATOR
 */
class Admin_Roles {
    /**
     * Custom capabilities of custom post types
     */
    private static $customCaps = array(
        [ 'singular' => 'book', 'plural' => 'books' ],
    );

    /**
     * Add custom capabilities for admin
     */
    public static function add_admin_capabilities() {

        $role = get_role( 'administrator' );

        foreach( self::$customCaps as $cap ){
            
            $singular = $cap['singular'];
            $plural = $cap['plural'];

            $role->add_cap( "edit_{$singular}" ); 
            $role->add_cap( "edit_{$plural}" ); 
            $role->add_cap( "edit_others_{$plural}" ); 
            $role->add_cap( "publish_{$plural}" ); 
            $role->add_cap( "read_{$singular}" ); 
            $role->add_cap( "read_private_{$plural}" ); 
            $role->add_cap( "delete_{$singular}" ); 
            $role->add_cap( "delete_{$plural}" );
            $role->add_cap( "delete_private_{$plural}" );
            $role->add_cap( "delete_others_{$plural}" );
            $role->add_cap( "edit_published_{$plural}" );
            $role->add_cap( "edit_private_{$plural}" );
            $role->add_cap( "delete_published_{$plural}" );
            
        }

    }

}

이제 클래스가 준비되었으므로 admin에 대한 게시물 유형 기능을 원하는 수만큼 추가할 수 있습니다. private static $customCaps 변수에 기능 유형을 추가하기만 하면 됩니다. 예를 들어 새로 추가된 사용자 정의 포스트 유형 기능을 다음과 같이 추가할 수 있습니다.

private static $customCaps = array(
    [ 'singular' => 'book', 'plural' => 'books' ],
    [ 'singular' => 'story', 'plural' => 'stories' ],
);

플러그인 비활성화 및 재활성화


register_activation_hook() 기능을 사용했으므로 이 코드가 작동하려면 플러그인을 비활성화했다가 다시 활성화해야 합니다. 활성화 후크는 관리자를 위한 모든 새로운 기능을 추가합니다. 이 시점에서 "User Role Editor "플러그인을 사용하고 사용자 역할을 제어하고 사용자 정의 게시물 유형 기능을 할당할 수 있습니다.

결론



모든 사용자 정의 게시물 유형에는 플러그인 사용자에게 권한을 제공하는 사용자 정의 기능 유형이 있어야 합니다. 이 특정 방법은 매우 간단하고 관리하기 쉽습니다. 사용자 정의 게시물 유형을 등록하는 모든 플러그인에 이 방법을 사용합니다. 내 최근 플러그인 "Classic Quiz Feedback Survey "도 이 방법을 사용하고 있습니다. 이 플러그인은 이제 WordPress 플러그인 디렉토리에서 사용할 수 있습니다.

이 기사가 도움이 되었기를 바라며 질문이 있으면 댓글 섹션에 질문하십시오.

좋은 웹페이지 즐겨찾기