Что означает поле wp_capabilities в таблице wp_usermeta
Я новичок в WordPress, в таблице wp_usermeta
я заметил, что у нас есть строка
meta_key meta_value
wp_capabilities a:1:{s:13:"administrator";b:1;}
Во-первых, что означает meta_value a:1:{s:13:"administrator";b:1;}
, где можно найти точное объяснение этого поля? Или я хочу узнать всё о ролях
, пользователях
и возможностях
, где я могу получить эту информацию.
Во-вторых, как создать новые роли через API WordPress
программным путем?
Заранее спасибо.

wp_capabilities сохраняет значение в виде сериализованного массива, вы можете попробовать это в своем php или для примера здесь: http://blog.tanist.co.uk/files/unserialize/.
Код:
a:1:{s:13:"administrator";b:1;}
Означает:
Array
(
[administrator] => 1
)
Это значит, что пользователь является администратором.
Вы можете добавить новые роли в базу данных, используя функцию add_role, и запускать её следует только один раз!

Для ясности, вы можете десериализовать массив, используя PHP-функцию unserialize
, и результатом в данном случае будет array('administrator' => true)
в формате var_export
.

В дополнение к ответу @Krysiek, вам следует знать, что данные, хранящиеся в мета-таблицах, включая метаданные пользователей, часто сериализованы. Если вы хотите узнать, что на самом деле представляют эти данные, вы можете использовать PHP-функцию unserialize, чтобы определить их значение. Например, если пропустить значение a:1:{s:13:"administrator";b:1;}
через unserialize (а затем вывести результат с помощью var_dump), получится следующее:
array(1) {
["administrator"]=>
bool(true)
}
Такие же записи вы найдете в таблице options
, а также в таблице post_meta
.
Однако вам следует избегать прямой записи в эти таблицы. В WordPress есть функции, которые позволяют хранить и получать данные о пользователях. Например, для чтения данных из таблицы пользовательских метаданных следует использовать get_user_meta, а для записи — функцию WordPress update_user_meta. Аналогичные функции существуют для таблиц post_meta и options.

meta_value
- это столбец для хранения значения мета-поля. Каждое мета-поле состоит из ключа и значения.
Думаю, эта статья из Codex о ролях и возможностях вам поможет: http://codex.wordpress.org/Roles_and_Capabilities
Для добавления пользовательских ролей следует использовать функцию add_role
(http://codex.wordpress.org/Function_Reference/add_role)
И пример её использования из Codex:
$result = add_role('basic_contributor', 'Основной участник', array(
'read' => true, // true разрешает эту возможность
'edit_posts' => true,
'delete_posts' => false, // false явно запрещает
));
if (null !== $result) {
echo 'Ура! Новая роль создана!';
} else {
echo 'Ой... роль basic_contributor уже существует.';
}

Ключ "wp_capabilities" в таблице wp_usermeta содержит сериализованное представление массива, который определяет роли пользователя и дополнительные возможности, добавленные этому пользователю с помощью $user->add_cap('my_capability');
. Спасибо spaul!
Команда WordPress изначально назвала поле [prefix]_capabilities, прежде чем осознала, что "возможности" (capabilities) на самом деле группируются для пользователей, выполняющих определённую роль. Изменение значения ключа с [prefix]_capabilities на [prefix]_roles нарушило бы работу множества сторонних плагинов, а также потребовало бы масштабного рефакторинга в самом WordPress.
По этой причине можно смело утверждать, что ключ wp_capabilities в usermeta хранит роли пользователей и был бы назван wp_roles, если бы не огромное количество полезного ПО, которое ожидает именно старое название.
Поскольку этот факт очень полезен для новых энтузиастов WordPress, я рекомендую всем, кто говорит о ролях (или возможностях) в WordPress, чётко указывать, что роли пользователей перечислены в массиве, который сериализован в таблице usermeta под ключом [prefix]_capabilities.

Неверно. Вы можете легко назначить пользовательские права для конкретных пользователей, вызвав $user->add_cap('my_capability');
, и тогда запись будет выглядеть как a:2:{s:13:"administrator";b:1;s:13:"my_capability";b:1;}
. Роль администратора, как и другие администраторы на сайте, не будут иметь этого права.

В таблице wp_usermeta
мы можем сохранять дополнительную информацию о пользователе при создании нового пользователя или обновлении профиля существующего.
В таблице wp_usermeta
есть столбец с именем meta_key
, где мы можем сохранять значение, через которое можно получить
или обновить
значение этого поля. Например:
add_user_meta( 'user_id', 'meta_key', 'meta_value')
— с помощью этой функции мы можем добавить мета-значение в таблицу сmeta_key='meta_key'
.get_user_meta('user_id', 'meta_key', true)
— используя эту функцию, мы можем получить значение пользователя сmeta_key = 'meta_key'
.update_user_meta( 'user_id, 'meta_key', 'meta_value')
— эта функция позволяет обновить мета-значение.delete_user_meta( 'user_id', 'meta_key')
— с её помощью можно удалить мета-значение пользователя.Если вы хотите сохранить поле
Отчество
для пользователей, то сохраните его вwp_usermeta
сmeta_key=middle_name
, а его значение — вmeta_value=значение
, используя эти функции.
Роль — это политика доступа, предоставляемая пользователю, определяющая уровень его прав на сайте. Роли можно добавлять и удалять.
Возможности (Capabilities) — это функции, которые добавляются или ограничиваются для роли. Например, есть две роли: «gold-role» и «platinum-role». Мы можем ограничить «gold-role» так, чтобы пользователь мог только добавлять записи, но не публиковать их, а для «platinum-role» добавить возможность публикации. Также можно добавлять или удалять возможности, связанные с ролью. Можно также ограничить доступ к метабоксам записей.
Для получения дополнительной информации перейдите по ссылке Роли и возможности.
Вы можете добавить роль и задать её возможности через API WordPress или использовать плагины. На мой взгляд, Advanced Access Manager — лучший плагин для управления ролями и возможностями.
