Это учебное пособие из четырех частей, охватывающее тему пользователей, ролей и возможностей WordPress. Серия будет посвящена архитектуре и дизайну пользовательских ролей в WordPress; выделить наиболее важные функции для взаимодействия с пользователями и управления ролями и возможностями; и в последнем уроке мы собираемся создать реальный пример, демонстрирующий полезность этого API.
Вступление
В первой части мы рассмотрели только теорию о пользователях, ролях и возможностях. Эта часть будет посвящена коду и функциям, которые предлагает WordPress для взаимодействия с этой системой. Очевидно, что мы не собираемся охватывать все функции, которые есть в WordPress, но я попытался перечислить наиболее важные и полезные.
Поскольку изменения и обновления WordPress происходят часто, вы всегда должны возвращаться к документации Кодекса и проверять, изменилось ли что-то. Я предоставлю ссылку на страницу Кодекса для каждой функции, которую мы рассмотрим здесь для вашего удобства.
Управление пользователями
Пользователи в WordPress отличаются от посетителей. Это люди, которые зарегистрировали аккаунт с уникальным именем пользователя на вашем сайте. Вы можете включить регистрацию новых пользователей на своем сайте из панели «Настройки» -> «Общие», установив флажок «Членство -> Кто угодно может зарегистрироваться».
В этом разделе мы рассмотрим некоторые полезные функции для взаимодействия с зарегистрированными пользователями в WordPress. В вашей новой настройке WordPress должен быть хотя бы один пользователь: тот, кто установил установку WordPress. В старых версиях это был «админ»; однако теперь вы можете выбрать имя пользователя при установке WordPress.
-
Создание, обновление и удаление пользователей
WordPress имеет визуальный интерфейс для создания, обновления и удаления пользователей. Вы должны использовать это большую часть времени. Однако есть случаи, когда вы хотите сделать это с помощью программирования: например, при импорте пользователей из другой среды или если вы создаете свою собственную пользовательскую форму регистрации.
WordPress имеет четыре функции для выполнения этих действий:
Сначала это может быть немного запутанным. Все первые 3 функции могут создавать новых пользователей, и «
wp_insert_user
» и «wp_update_user
» могут обновлять существующих пользователей. Но для этого есть причина.Есть два способа создать нового пользователя:
- Передавая только минимальную информацию, необходимую для создания пользователя (имя пользователя, пароль и адрес электронной почты). В этом случае вам следует использовать функцию
wp_create_user
. - Передав массив данных пользователя. В этом случае вам следует использовать функцию
wp_insert_user
. Это дает возможность установить любые пользовательские данные для вашего пользователя перед его добавлением.
Чтобы обновить существующего пользователя, вы должны использовать
wp_update_user
. Можно использовать тот жеwp_insert_user
; однако эта функция не хэширует пароль пользователя и, таким образом, может не работать. Поэтому лучше использовать правильную функцию для правильной работы.Ниже я приведу примерный фрагмент использования каждой функции. Однако вам следует обратиться к Кодексу, если вы ищете более подробную документацию.
Использование
wp_create_user
01020304050607080910111213141516171819add_action( ‘init’, ‘wpttuts_createuser’ );function wpttuts_createuser() {// User Data$user_name = ‘new_user’;$user_password = ‘new_user_password’;$user_email = ‘[email protected]’;// Create the user$user_id = wp_create_user( $user_name, $user_password, $user_email );// Checks if the function returned a WP Error Objectif ( is_wp_error ($user_id) ) {$user_id->get_error_message();}else {// user created successfully}}Использование
wp_insert_user
01020304050607080910111213141516171819202122add_action( ‘init’, ‘wpttuts_insertuser’ );function wpttuts_insertuser() {// Prepare the user data$user_data = array (‘user_login’ => ‘new_user’,‘user_password’ => ‘new_user_password’‘user_email’ => ‘[email protected]’,‘role’ => ‘administrator’);// Create the user$user_id = wp_insert_user( $user_data );// Checks if the function returned a WP Error Objectif ( is_wp_error( $user_id ) ) {$user_id->get_error_message();}else {// user created successfully}}Использование
wp_update_user
010203040506070809101112131415161718192021add_action( ‘init’, ‘wpttuts_updateuser’ );function wpttuts_updateuser() {// Prepare the user data$user_data = array (‘user_id’ => 3,‘description’ => ‘ Our newly created user’);// Updates the user description$user_id = wp_update_user( $user_data );// Checks if the function returned a WP Error Objectif ( is_wp_error( $user_id ) ) {$user_id->get_error_message();}else {// user updated successfully}}Использование
wp_delete_user
1234567add_action( ‘init’, ‘wpttuts_deleteuser’ );function wpttuts_deleteuser() {if ( wp_delete_user( 3, 1 ) ) {// User removed successfully}} - Передавая только минимальную информацию, необходимую для создания пользователя (имя пользователя, пароль и адрес электронной почты). В этом случае вам следует использовать функцию
-
Получение списка пользователей
WordPress раньше предлагал две функции для получения списка пользователей, поэтому вам не нужно запрашивать базу данных. Первая функция «
get_users_of_blog()
» возвращает массив всех пользователей в текущем блоге (или вы можете передать идентификатор блога, если вы запускаете установку MultiSite). Вторая функция «get_users()
» возвращает список пользователей на основе аргументов, переданных функции. Это исключает необходимость выполнения пользовательских запросов SQL к базе данных.Обе функции возвращают массив объектов пользовательских данных. (За исключением
get_users()
где вы можете указать, что нужно возвращать только определенное поле.) Пользовательский объект будет более подробно рассмотрен в следующем разделе.Функция «
get_users_of_blog()
» теперь устарела, поэтому вам больше не следует ее использовать, а вместо нее используйте «get_users()
». Ниже приведен пример использования функцииget_users()
.0102030405060708091011121314151617add_action( ‘init’, ‘wpttuts_getusers’ );function wpttuts_getusers() {// Query criteria$args = array (‘orderby’ => ‘url’,‘order’ => ‘ASC’);// Get the users array$users = get_users( $args );// Loop through users, and display their home pageforeach( $users as $user) {echo ‘<a href=»‘ . $user->user_url . ‘»>’ .}}Аргумент функции принимает больше параметров. Вы можете найти полный список этих опций на странице кодекса функции.
-
blog_id
только для многосайтовых установок. Значением по умолчанию является текущий идентификатор блога. -
role
Ограничьте возвращаемых пользователей указанной ролью. -
include
Массив идентификаторов пользователей для включения в возвращаемый запрос. -
exclude
Массив идентификаторов пользователей для исключения из возвращенного запроса.
-
-
Класс
WP_User
Класс
WP_User
позволяет получить доступ к свойствам, возможностям и методам, относящимся к конкретному пользователю. Для создания нового экземпляра класса вам понадобится идентификатор пользователя или имя пользователя; и если вы используете многосайтовую установку, вам также понадобится идентификатор блога.Вы можете инициировать класс для конкретного пользователя и вывести содержимое класса. Это отобразит только свойства, но все еще полезно, если вы хотите читать внутри пользовательского класса.
123456add_action( ‘init’, ‘wptuts_wpuserclass’ );function wptuts_wpuserclass() {$user = new WP_User( 1 );var_dump( $user );}Ниже приводится краткое описание свойств и методов класса
WP_User
:Свойства
WP_User
-
data
( объект с пользовательскими данными, такими как имя пользователя, пароль, URL …) -
ID
( Integer ID пользователя) -
caps
( Array ) -
roles
( Массив Ролей, назначенных пользователю) -
cap_key
( String ) -
allcaps
( Array Все возможности, которые есть у пользователя) -
filter
( нулевой )
WP_User
методыWP_User
-
get_role_caps()
Устанавливает роли и свойства allcaps. -
add_role()
Добавить роль для пользователя. -
remove_role()
Удалить роль из пользователя. -
set_role()
Установите роль для пользователя. Это удалит ранее назначенные роли. -
add_cap()
Добавить возможность для пользователя. -
remove_cap()
Удалить возможность от пользователя. -
remove_all_caps()
Удалить все возможности пользователя. -
has_cap()
Проверяет, есть ли у пользователя возможность или имя роли.
-
-
Метаданные пользователей
Как указывалось в предыдущей статье, метаданные пользователей — это данные о пользователе, сохраненные в таблице
wp_usermeta
. Он сохраняется как значения ключа / пары, а мета-значение может быть любым типом данных. Пара не обязательно уникальна. Вы можете хранить несколько пар с одним и тем же ключом.Добавление метаданных пользователя
Функция
add_user_meta()
добавляет новые пользовательские метаданные. Функция возвращает истину, если данные успешно добавлены, и ложь в случае сбоя. Как упоминалось ранее, можно добавить много мета-значений с одним и тем же ключом. Если вы хотите сделать мета-ключи уникальными, установите для четвертого аргумента значение true.12345678add_action(‘init’, ‘wptuts_addusermeta’);function wptuts_addusermeta() {// Add multiple meta values with the same meta keyadd_user_meta( 1, ‘bookmarks’, ‘http://site1.com’, false );add_user_meta( 1, ‘bookmarks’, ‘http://site2.com’, false );add_user_meta( 1, ‘bookmarks’, ‘http://site3.com’, false );}Извлечение метаданных пользователя
Функция
get_user_meta()
возвращает мета-значение на основе идентификатора пользователя и мета-ключа, переданного ему.0102030405060708091011add_action(‘init’, ‘wptuts_getusermeta’);function wptuts_getusermeta() {// Retrieves the user bookmarks$bookmarks = get_user_meta( 1, ‘bookmarks’, false );echo ‘<ul>’;foreach ( $bookmarks as $bookmark ) {echo ‘<li><a href=»‘ . $bookmark . ‘»>’ .}echo ‘</ul>’;}Обновление метаданных пользователя
Функция
update_user_meta()
обновляет одно мета-значение. Если для одного и того же мета-ключа существует несколько значений, а предыдущее мета-значение не указано, то новое значение будет перезаписывать все предыдущие мета-значения.123456add_action(‘init’, ‘wptuts_updateusermeta’);function wptuts_updateusermeta() {// Updates a user bookmarkupdate_user_meta( 1, ‘bookmarks’, ‘https://site2.com’, ‘http://site2.com’ );}Удаление метаданных пользователя
Функция
delete_user_data()
удаляет один или все мета-ключ / пары для данного мета-ключа. Если вы хотите удалить одно значение, вам следует указать его в третьем аргументе.123456add_action(‘init’, ‘wptuts_removeusermeta’);function wptuts_removeusermeta() {// Updates a user bookmarkdelete_user_meta( 1, ‘bookmarks’, ‘https://site2.com’ );}
Управление ролями и возможностями
-
Создание и удаление ролей
Роли WordPress расширяемы. Вы можете добавлять и удалять роли. Добавить роль довольно просто, вам нужно имя слагаемого роли, отображаемое имя для роли; и возможности, которые имеет роль.
123456add_action( ‘init’, ‘wptuts_addrole’ );function wptuts_addrole() {add_role( ‘uploader’, ‘Uploader’, array(‘upload_files’) );add_role( ‘link_manager’, ‘Link Manager’, array(‘manage_links’) );}Если вы зайдете на страницу настроек пользователя (Пользователь-> Выбрать любого пользователя-> Редактировать), вы обнаружите, что ваши вновь добавленные роли доступны. Они отображаются с отображаемым именем, которое вы ввели.
Важно отметить, что создание роли должно быть сделано только один раз. Так что, если вы подключаетесь к действию «
init
», как в приведенном выше коде, вы заново создаете роль при каждом запуске кода. Это не хорошая вещь; на практике вы хотите создать его только один раз. Затем вы можете подключить его к крюку активации плагина и обязательно удалить его, когда плагин деактивирован.Удаление ролей тоже довольно просто. Вам просто нужно имя роли слизняка.
123456add_action( ‘init’, ‘wptuts_removerole’ );function wptuts_removerole() {remove_role( ‘uploader’ );remove_role( ‘link_manager’ );} -
Добавление возможностей в роли
Как и у пользователей, у ролей есть специальный класс:
WP_Role
. Однако для инициализации этого класса требуются как имя роли, так и возможности роли; что не совсем так полезно.WordPress предлагает другую функцию
get_role()
которая требует только имя роли и инициализирует класс для вас.123456add_action(‘init’, ‘wptuts_getrole’);function wptuts_getrole() {$role = get_role(‘editor’);var_dump($role);}Возвращаемый объект имеет два свойства и три метода.
Свойства
WP_Role
-
capabilities
Массив возможностей, которые имеет роль. -
name
роли.
WP_Role
Методы-
add_cap()
Добавить возможность к объекту роли -
has_cap()
Проверьте, имеет ли роль возможность -
remove_cap()
Удалить возможность из роли
-
-
Проверка разрешений
Роли и возможности есть, они ничего не делают. Вы должны применять их в своем плагине или теме, проверяя их перед выполнением кода. Вы должны всегда проверять возможности, а не роли. Пользователь с ролью «редактор» не гарантирует, что у него есть возможности по умолчанию, которые WordPress назначает для этой роли, поскольку они могут быть изменены другим плагином или самим владельцем блога.
WordPress имеет 3 функции для проверки прав доступа, которые в некоторой степени взаимозаменяемы.
current_user_can()
проверяет, имеет ли текущий пользователь указанную возможность. Он также принимает сообщение или объект для проверки мета-возможностей.user_can()
работает таким же образом, но вы можете указать идентификатор пользователя. Однако он не проверяет мета-возможности. Так что немного не хватает, если вы хотите проверить мета-возможности для пользователя, отличного от текущего пользователя. Для этого вы можете использоватьauthor_can()
которая проверяет, может ли автор сообщения выполнить определенную задачу на основе возможности и идентификатора сообщения.1234567// checks if the post author of the first post can publish the postif ( author_can( 1, ‘publish_posts’) ) {publish_post_function();}else {echo «You don’t have the right to publish the post»;}
Вывод
В этой части я попытался охватить как можно больше функций WordPress, а также объяснить, когда следует использовать каждую функцию. Теперь вы должны иметь возможность создать плагин или тему, которая использует систему возможностей. В следующей части я покажу вам, как создать плагин, который использует эту систему.