Мы часто используем пользовательские типы сообщений для различных целей. Я считаю, что все разработчики плагинов 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”