Рубрики
Uncategorized

Возможности и роли пользовательских типов сообщений в WordPress

Мы часто используем пользовательские типы сообщений для различных целей. Я верю, что все разработчики плагинов WordPress любят t… С тегами wordpress, php, учебник, webdev.

Мы часто используем пользовательские типы сообщений для различных целей. Я считаю, что все разработчики плагинов WordPress любят эту функцию. Но многие из нас, кто относительно новичок в разработке WordPress, вероятно, не знают о пользовательских возможностях и его потенциале. В этой статье я попытаюсь пролить некоторый свет на возможности пользовательского типа сообщений.

Зачем использовать новые возможности для пользовательского типа записи

Суть вопроса в том, почему я должен использовать новые возможности вместо настроек по умолчанию. Ответ прост. Всякий раз, когда вам нужен точный контроль для разных пользователей, вам нужны пользовательские возможности. Например, если в вашем плагине есть пользовательские типы записей, и вы хотите распределять определенные задачи между разными пользователями, вам нужны пользовательские возможности.

Допустим, у меня есть тип поста книга и только авторы могут создавать, редактировать книги. Я буду назначать пользовательские возможности только авторам. Существует отличный плагин, доступный для настройки ролей и возможностей пользователей. Он называется ” Редактор ролей пользователей “. По умолчанию WordPress назначает возможности на основе ролей пользователей, таких как “администратор”, “редактор”, “автор” и так далее. Чтобы узнать о возможностях на основе ролей пользователей, используйте функцию get_role() .

Как создавать новые возможности

Теперь, когда мы поняли потенциал, давайте посмотрим, как мы можем творить. Когда мы регистрируем новый тип записи в плагине, мы можем определить пользовательские возможности.

Пользовательский тип записи должен быть зарегистрирован с помощью функции register_post_type() и |/инициализации действия. Например, давайте зарегистрируем книгу тип записи с пользовательскими возможностями

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' => массив('книга','книги') , который создаст новый тип возможностей для книги типа записи. Также важно использовать '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( строка $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}" );
            
        }

    }

}

Теперь, когда наш класс готов, мы можем добавить любое количество возможностей типа сообщений для администратора. Нам просто нужно добавить типы возможностей в частные статические $пользовательские шапки переменная. Например, недавно добавленная возможность пользовательского типа записи может быть добавлена следующим образом –

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

Деактивируйте и повторно активируйте плагин

Поскольку мы использовали функцию register_activation_hook() , вам необходимо деактивировать, а затем повторно активировать плагин, чтобы заставить этот код работать. Крючок активации добавит все новые возможности для администратора. С этого момента вы можете использовать плагин ” Редактор ролей пользователей ” и управлять ролями пользователей и назначать им пользовательские функции типа сообщений.

Вывод

Все настраиваемые типы сообщений должны иметь настраиваемые типы возможностей, поскольку это дает возможность пользователям плагина. Этот конкретный метод очень прост и управляем. Я использую этот метод для всех своих плагинов, которые регистрируют пользовательские типы сообщений. Мой недавний плагин ” Опрос с отзывами о классической викторине ” также использует этот метод. Этот плагин теперь доступен в каталоге плагинов WordPress.

Я надеюсь, вам понравилась эта статья, и если у вас есть какие-либо вопросы, пожалуйста, задайте их в разделе комментариев.

Оригинал: “https://dev.to/amitbiswasta/custom-post-type-capabilities-and-roles-in-wordpress-53pi”