Користувачі в WordPress
Базова інформація, яку потрібно знати про користувачів WordPress.
Таблиця wp_users
-
ID
(число) - ID користувача. Вказується лише, якщо потрібно оновити дані існуючого користувача. Усі обов’язкові параметри стають не обов’язковими.
-
user_login
(рядок) (обов’язковий) -
Логін нового користувача. Для додаткової перевірки логіну перед створенням/оновленням можна використовувати фільтр:
pre_user_login . -
user_pass
(рядок) (обов’язковий) - Пароль для користувача. Хешується.
-
user_nicename
(рядок) -
Ім’я користувача. Якщо не вказати, буде як логін. Містить очищений для використання URL логін – очищається через
sanitize_title() . Наприклад, якщо при реєстрації вказати в полі логіну email
[email protected] , то тут отримаємо
userexample-com . Використовується на архівну сторінку автора, тому значення поля має бути унікальним кожному за користувача. -
user_email
(рядок) - Пошта. Перевіряється на існування у БД.
-
user_url
(рядок) -
Сайт. Фільтр:
pre_user_url . -
user_registered
(DATETIME) - Дата реєстрації. Ymd H:i:s. Якщо не вказано при створенні користувача, поточна дата в діапазоні GMT береться.
- user_activation_key
-
Хеш ключа для відновлення пароля створюється при запиті відновлення. get_password_reset_key
() . -
user_status
(не використовується) Це поле більше не використовується ядром WordPress, яке раніше використовувалося в мультисайтах при переміщенні користувача в спам (цей функціонал був вилучений). Докладніше див. функцію: update_user_status() .
Колонку можна використовувати якось у своїх цілях, але краще дати їй спокій.
-
display_name
(рядок) - Відображене ім’я. Якщо порожньо буде як логін.
Таблиця wp_usermeta
Важливі мета-дані (мета-поля)
-
wp_capabilities
(масив) Роль і права користувача:
a:1:{s:13:"administrator";b:1;}
.ВАЖЛИВО! Префікс цієї опції
wp_
повинен збігатися з префіксом таблиць БД$wpdb->prefix
або$wpdb->get_blog_prefix()
мультисайту.Так, наприклад, якщо на робочому сайті змінити префікс таблиць в
wp-config.php
, то в цій опції вручну також потрібно змінити префікс, інакше всі користувачі залишаться без прав, тому що після зміни префікса, наприклад, наwk_
ВП шукатиме права в метаполіwk_capabilities
.- session_tokens
- Активні сесії. Створюються при вході до облікового запису.
Які ще дані зберігаються в таблиці метаданих
-
nickname
(рядок) - Нік. Якщо пусто, буде як логін.
-
first_name
(рядок) - Ім’я.
-
last_name
(рядок) - Прізвище.
-
description
(рядок) - Трохи про себе.
-
rich_editing
(рядок/bool) -
Включити (true) чи ні (false) візуальний редактор. user_can_richedit
()
За замовчуванням – ‘true’ -
syntax_highlighting
(рядок/bool) - Увімкнути підсвічування синтаксису для візуального редактора.
-
comment_shortcuts
(рядок/bool) -
Чи включити для користувача комбінації клавіш модерації коментарів. Підключати чи ні скрипт
enqueue_comment_hotkeys_js
. enqueue_comment_hotkeys_js
() .
Типово – ‘false’ -
use_ssl
(рядок/bool) -
Чи повинен користувач завжди логінуватися по https.
Типово – ‘false’ -
show_admin_bar_front
(рядок) -
Показувати адмін бар на сайті чи ні.
Типово ‘true’ -
role
(рядок) -
Роль користувача.
За замовчуванням береться з налаштувань: get_option(‘default_role’) -
locale
(рядок) -
Мова користувача (локаль). Наприклад: ru_RU. З WP 4.7.
За замовчуванням ” -
default_password_nag
(true/false) - true – означає, що встановлено пароль за замовчуванням.
Також у метаполях зберігаються Опції Адмін-панелі – це налаштування сторінок адмінки та інше. Наприклад: збережені вибори метабоксів на різних сторінках.
meta_key | meta_value |
---|---|
admin_color | midnight |
closedpostboxes_dashboard | a:0:{} |
metaboxhidden_dashboard | a:4:{i:0;s:17:”dashboard_primary”;i:1;s:24:”tinypng_dashboard_widget”;i:2;s:18:”dashboard_activity”;i:3;s:21:” dashboard_quick_press”;} |
closedpostboxes_{POST_TYPE} | a:1:{i:0;s:11:”commentsdiv”;} |
metaboxhidden_{POST_TYPE} | a:3:{i:0;s:7:”slugdiv”;i:1;s:13:”trackbacksdiv”;i:2;s:11:”commentsdiv”;} |
meta-box-order_dashboard | |
meta-box-order_{POST_TYPE} | |
meta-box-order | |
wp_media_library_mode | Можливо: list або grid. |
show_welcome_panel | 0 |
show_admin_bar_front | true |
wp_user-settings застаріло: wp_usersettings | editor=tinymce&editor_expand=off&libraryContent=browse&dtmenuRight=1&mfold=o&posts_list_mode=list |
wp_user-settings-time застаріло: wp_usersettingstime | 1604820217 |
dismissed_wp_pointers | Різні нотатки які потрібно показати користувачеві в адмінці. Може зберігати такі ключі: theme_editor_notice,wp330_toolbar,wp330_media_uploader,wp330_saving_widgets,wp340_customize_current_theme_link,wp340_choose_image_from_library,wp350_media |
{PAGE_KEY}_per_page | На сторінках з WP_List_Table скільки елементів виводитиметься в таблиці. Приклади назви опцій: edit_post_per_page, users_per_page, edit_comments_per_page, upload_per_page |
Ролі та права користувачів
User Role Editor – плагін для керування ролями. Редактор ролей користувачів WordPress, плагін дозволяє легко змінювати ролі та можливості користувачів.
За промовчанням у WordPress 6 ролей:
Super Admin | Супер-адміністратор. Має права керувати мережею сайтів. Ця роль з’являється тільки при мультисайті установки . |
administrator | Адміністратор сайту (окремого сайту в мережі мультисайт). |
editor | Редактор. Має доступ до всіх постів, сторінок, коментарів, категорій, тегів та посилань. |
author | Автор. Може писати, завантажувати фотографії, редагувати та публікувати свої пости. |
contributor | Учасник Може писати пости, які потім публікує редактор чи адмін. |
subscriber | Передплатник. Не може нічого, крім редагування профілю. |
Яку роль отримує новий користувач вказується у Настройки > Общие
. Дані зберігаються в опції: default_role :
Список прав за ролями
Список примітивних (фундаментальних) прав користувача. Це можливості, які за замовчуванням є у зазначених ролей (користувачів). Цей список прав задається один раз, при встановленні WordPress – він зберігається в таблицю БД wp_options
в опцію wp_user_roles
.
Право | Супер-Адмін | Адмін | Редактор | Автор | Учасник | Передплатник |
---|---|---|---|---|---|---|
read | так | так | так | так | так | так |
delete_posts | так | так | так | так | так | |
edit_posts | так | так | так | так | так | |
delete_published_posts | так | так | так | так | ||
edit_published_posts | так | так | так | так | ||
publish_posts | так | так | так | так | ||
upload_files | так | так | так | так | ||
delete_others_pages | так | так | так | |||
delete_others_posts | так | так | так | |||
delete_pages | так | так | так | |||
delete_private_pages | так | так | так | |||
delete_private_posts | так | так | так | |||
delete_published_pages | так | так | так | |||
edit_others_pages | так | так | так | |||
edit_others_posts | так | так | так | |||
edit_pages | так | так | так | |||
edit_private_pages | так | так | так | |||
edit_private_posts | так | так | так | |||
edit_published_pages | так | так | так | |||
manage_categories | так | так | так | |||
manage_links | так | так | так | |||
moderate_comments | так | так | так | |||
publish_pages | так | так | так | |||
read_private_pages | так | так | так | |||
read_private_posts | так | так | так | |||
unfiltered_html | так | так ¹ | так ¹ | |||
activate_plugins | так | так ² | ||||
create_users | так | так ¹ | ||||
deactivate_plugins | так | так | ||||
delete_plugins | так | так ¹ | ||||
delete_themes | так | так ¹ | ||||
delete_users | так | так ¹ | ||||
edit_dashboard | так | так | ||||
edit_files | так | так ¹ | ||||
edit_plugins | так | так ¹ | ||||
edit_theme_options | так | так | ||||
edit_themes | так | так ¹ | ||||
edit_users | так | так ¹ | ||||
export | так | так | ||||
import | так | так | ||||
install_languages | так | так ¹ | ||||
install_plugins | так | так ¹ | ||||
install_themes | так | так ¹ | ||||
list_users | так | так | ||||
manage_options | так | так | ||||
promote_users | так | так | ||||
remove_users | так | так | ||||
switch_themes | так | так | ||||
update_core | так | так ¹ | ||||
update_languages | так | так ¹ | ||||
update_plugins | так | так ¹ | ||||
update_themes | так | так ¹ | ||||
unfiltered_upload | так ³ | так ³ | ||||
manage_network_options | так | |||||
manage_network_plugins | так | |||||
manage_network_themes | так | |||||
manage_network_users | так | |||||
manage_network | так | |||||
manage_sites | так | |||||
setup_network | так | |||||
upgrade_network | так |
¹
коли один сайт (не мультисайт).²
коли один сайт (не мультисайт). Або вмикається у налаштуваннях мережі.³
– Це право потрібно включати окремо, докладніше нижче .
Мета права
Вище перераховано перелік примітивних (фундаментальних) прав. Але ще є так звані мета-права. Вони ніде не зберігаються, а обчислюються «нальоту» й у результаті перетворюються на примітивне право.
Список мета-прав:
activate_plugin activate_plugins add_comment_meta add_post_meta add_term_meta add_user_meta add_users assign_categories assign_post_tags assign_term create_app_password create_sites create_users customize deactivate_plugin deactivate_plugins delete_app_password delete_app_passwords delete_categories delete_comment_meta delete_page delete_page delete_plugins delete_post delete_post delete_post_meta delete_post_tags delete_site delete_sites delete_term delete_term_meta delete_themes delete_user delete_user delete_user_meta delete_users edit_app_password edit_categories edit_comment edit_comment edit_comment_meta edit_css edit_files edit_page edit_page edit_plugins edit_post edit_post edit_post_meta edit_post_tags edit_term edit_term_meta edit_themes edit_user edit_user edit_user_meta edit_users erase_others_personal_data export_others_personal_data install_languages install_plugins install_themes list_app_passwords manage_links manage_network manage_network_options manage_network_plugins manage_network_themes manage_network_users manage_post_tags manage_privacy_options manage_sites promote_user promote_user publish_post read_app_password read_page read_page read_post read_post remove_user remove_user resume_plugin resume_theme setup_network unfiltered_html unfiltered_upload update_core update_https update_languages update_php update_plugins update_themes upgrade_network upload_plugins upload_themes edit_term - WP 4.7 - Не перевірять хто створив термін - тільки перевіряє наявність зазначеного терміну та таксономії. delete_term - WP 4.7 - assign_term - WP 4.7 - activate_plugin - WP 4.9 - current_user_can( 'activate_plugin', 'my-plugin/my-plugin.php' ) deactivate_plugin - WP 4.9 - current_user_can( 'deactivate_plugin', 'my-plugin/my-plugin.php' ) export_others_personal_data - WP 4.9.6 - is_multisite() ? 'manage_network' : 'manage_options' erase_others_personal_data - WP 4.9.6 - is_multisite() ? 'manage_network' : 'manage_options' manage_privacy_options - WP 4.9.6 - is_multisite() ? 'manage_network' : 'manage_options' update_php - WP 5.0 - is_multisite() ? is_super_admin() : update_core update_https - WP 5.7 - is_multisite() ? is_super_admin() : manage_options | update_core create_app_password - WP 5.7 - map_meta_cap( 'edit_user', $user_id ) list_app_passwords - WP 5.7 - map_meta_cap( 'edit_user', $user_id ) read_app_password - WP 5.7 - map_meta_cap( 'edit_user', $user_id ) edit_app_password - WP 5.7 - map_meta_cap( 'edit_user', $user_id ) delete_app_passwords - WP 5.7 - map_meta_cap( 'edit_user', $user_id ) delete_app_password - WP 5.7 - map_meta_cap( 'edit_user', $user_id )
Для перевірки таких прав потрібно передавати додаткові параметри, наприклад ID запису, для якої потрібно перевірити, чи може користувач її редагувати. Наприклад:
if( current_user_can( 'edit_post', 123 ) ){ echo 'Поточний користувач може редагувати пост 123'; }
У цьому випадку WP нальоту перевіряє чи є користувач автором цієї посади, чи має примітивне право редагувати всі пости. У результаті, якщо перевірку пройдено, це мета право перетворюється на аналогічне примітивне право, яке дозволяє виконувати дію.
Докладніше про мета права читайте в описі map_meta_cap() .
unfiltered_upload
За замовчуванням можливість unfiltered_upload
є у адміністратора . Проте це за замовчуванням заблоковано, тобто. ролі не пройдуть перевірку if( current_user_can('unfiltered_upload') )
, незважаючи на наявність у них такого права.
Щоб право unfiltered_upload почало працювати як очікується, потрібно у файлі wp-config.php “включити” константу:
define( 'ALLOW_UNFILTERED_UPLOADS', true );
З визначенням цієї константи ролі, що мають право unfiltered_upload
, зможуть завантажувати файли з будь-яким розширенням (без перевірки типу файлу).
Для мультисайту складання право unfiltered_upload
є тільки у Супер Адміністратора. Якщо інша роль має право unfiltered_upload
, воно просто ігноруватися. Докладніше дивіться перевірку мета-права в map_meta_cap() :
case 'unfiltered_upload': if ( defined( 'ALLOW_UNFILTERED_UPLOADS' ) && ALLOW_UNFILTERED_UPLOADS && ( ! is_multisite() || is_super_admin( $user_id ) ) ) { $caps[] = $cap; } else { $caps[] = 'do_not_allow'; } break;
PHP Функції
Весь список функцій дивіться тут . А ось деякі з функцій:
current_user_can() | Перевіряє права поточного користувача, здійснювати вказану дію. |
wp_get_current_user() | Отримує дані про поточного авторизованого користувача (об’єкт WP_User). Встановлює користувача, якщо не встановлено. |
get_current_user_id() | Отримує ID поточного (авторизованого) користувача. |
is_user_logged_in() | Перевіряє чи авторизований користувач (чи увійшов користувач під своїм логіном). Повертає true, якщо користувач авторизований та false, якщо ні. Умовний тег. |
get_userdata() | Отримує дані вказаного користувача як об’єкт WP_User . |
get_user_by() | Отримує користувача за вказаним полем та значенням цього поля (за ID, логіном, поштою). |
get_users() | Отримує користувачів відповідно до переданих параметрів. |
update_user_meta() | Оновлює мета поля вказаного користувача. |
get_user_meta() | Отримує окреме поле мета або всі цілі поля зазначеного користувача. |
delete_user_meta() | Видаляє зазначені метадані певного користувача. |
map_meta_cap() | Переводить вказану мета-можливість у примітивну можливість, щоб потім перевірити право доступу користувача. |
wp_insert_user() | Створює користувача WordPress у базі даних. |
wp_update_user() | Оновлює дані користувача у базі даних. Оновлюються обидві таблиці wp_usermeta та wp_users. |
wp_create_user() | Реєструє нового користувача. Вказуються логін (ім’я), пароль та email. |
register_new_user() | Реєструє нового користувача. Вказуються лише логін та email. |
wp_login_url() | Отримує URL-адресу сторінки входу/авторизації: /wp-login.php |
wp_signon() | Авторизує користувача, за вказаним логіном/email, паролем та параметром remember . |
wp_set_password() | Змінює пароль користувача. Оновлює вказаний пароль у БД і скидає кеш користувача. |
wp_check_password() | Порівнює рядки паролів: читальний пароль (звичайний) з кодованим паролем (як хеша). Потрібна для перевірки пароля користувача. |
WP_User::add_cap() | Додає або видаляє право (можливість) у вказаного користувача. |
Процес встановлення поточного користувача
Для встановлення поточного користувача в ядрі на хук determine_current_user повішені такі функції. Кожна з них встановлює поточного користувача різних видів запиту (фронт, REST запит).
add_filter( 'determine_current_user', 'wp_validate_auth_cookie'); add_filter( 'determine_current_user', 'wp_validate_logged_in_cookie', 20); add_filter( 'determine_current_user', 'wp_validate_application_password', 20);
Хук _wp_get_current_user() .
_wp_get_current_user() встановлює поточного користувача в глобальну змінну $current_user
при першому дзвінку та при наступних дзвінках бере дані від туди.
Рано коли може бути викликана функція wp_get_current_user() – це подія plugins_loaded (бажано з великим пріоритетом, щоб відпрацювала в кінці), тобто. після підключення всіх плагінів та базової їх ініціалізації.
Взагалі, її рекомендується викликати на хуку init , тобто. після того, як ядро і всі плагіни завантажені і їх базовий код відпрацьований і наступний крок це виведення даних на екран.