Как внести изменения в роль пользователя WordPress

Роли пользователя

Роли пользователя


Каждому владельцу блога WordPress версии 2.8 и выше известны стандартные пользовательские роли: Администратор (Administrator), Редактор (Editor), Автор (Author), Участник (Contributor), Подписчик (Subscriber).
В чем разница между ними? Что “Автор” может такого, чего не может “Участник”? Исчерпывающую информацию об это можно найти здесь, на WordPress.org (правда на английском языке).
Где же все эти данные о пользовательских ролях WordPress хранятся? Как изменить роль, когда это действительно необходимо? Заинтересовались? Прочтите эту статью и вы найдете ответы на эти вопросы. Я столкнулся с такой проблемой на блоге с несколькими авторами:
Пользователь с ролью “Автор” может загружать изображения на сервер блога, но не может использовать их в своих статьях. Любые тэги HTML немедленно удаляются из текста сразу после сохранения изменений. Тот же пользователь, но уже с ролью “Редактор” преспокойно сохраняет текст статьи с любыми тэгами HTML.
Проблема заключается в том, что WordPress автоматически применяет HTML-фильтры ко всем текстам пользователя, если в его роль не включена возможность/разрешение “unfiltered_html”. Роль “Автор” по-умолчанию не включает разрешение “unfiltered_html”. Таким образом, если вы желаете дать вашим авторам возможность включать изображения или видео в их статьи, вам нужно изменить пользовательскую роль, и вы – на верном пути.
Прежде всего запомните – содержимое пользовательских ролей хранится в таблице базы данных MySQL с названием по-умолчанию “wp_options”. Префикс названия таблицы “wp_” может отличаться в зависимости от того, какой префикс был указан при установке WordPress, далее по тексту я использую префикс “wp_”.
Для продолжения данного исследования вам нужен один из клиентов MySQL (MyPHPAdmin, MySQLyog и т.д.). Подсоединитесь с его помощью к базе данных MySQL вашего блога и продолжайте далее вместе с чтением данной статьи.
Эта SQL-команда поможет вам найти запись, содержащую данные о ролях пользователей WordPress:

SELECT * FROM wp_options WHERE option_name="wp_user_roles"

Получив результат исполнения этой команды, вы увидите, что данные пользовательских ролей хранятся в поле option_value в виде текстовой строки специального формата. Этот формат используется для чтения/записи массивов в языке PHP.

a:5:{
s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:54:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;s:17:"unfiltered_upload";b:1;s:14:"edit_dashboard";b:1;s:14:"update_plugins";b:1;s:14:"delete_plugins";b:1;s:15:"install_plugins";b:1;s:13:"update_themes";b:1;s:14:"install_themes";b:1;}}
s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:34:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;}}
s:6:"author";a:2:{s:4:"name";s:6:"Author";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}
s:11:"contributor";a:2:{s:4:"name";s:11:"Contributor";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}
s:10:"subscriber";a:2:{s:4:"name";s:10:"Subscriber";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}

Разберем, что мы видим:

  • a:N:{ это начало массива, где “N” – количество элементов массива. Например, “a:5:{” в начале строки означает, что массив ролей состоит из пяти элементов. Вспомните, что WordPress включает как раз 5 ролей.
  • s:N:"строка"; – “s” это строковый тип, N – количество символов в строке. Например, s:6:"author";
  • b:1; – означает логический (Boolean) тип со значением “1” or “True” (Истина)
  • Вот почти и все. Мы узнали, что разрешения хранятся внутри ролей в формате “Наименование-Логическое значение”. Теперь нужно найти разрешение “unfiltered_html” в роли “Editor” (Редактор), скопировать последовательность s:15:"unfiltered_html";b:1; от туда и вставить её в роль “Author” (Автор), сразу после разрешения s:12:"upload_files";b:1;. Чтобы завершить изменение роли, нужно увеличить на 1 количество элементов в массиве “Author” (Автор). По-умолчанию в роль “Author” включено 10 разрешений или в особом формате a:10:{s:12:"upload_files". Таким образом, нам осталось заменить 10 на 11, и в итоге получить этот код a:11:{s:12:"upload_files" внутри роли “Author”.
    Что осталось сделать? Всего лишь внести изменения в таблицу wp_options базы данных MySQL. Для этого используйте такую SQL-команду:

     UPDATE `wp_options` 
    SET option_value='измененное значение для ролей' WHERE option_id=NN;

    Не забудьте заменить ‘измененное значение для ролей’ на откоректированные данные пользовательских ролей, полученные как результат предыдущего запроса, а ‘NN’ – заменить на Id записи таблицы wp_options из того же запроса.
    Внимание! Создайте резервную копию данных из таблицы wp_options до внесения в нее каких-либо изменений. Только после этого экспериментируйте с SQL-командой update.

    Поздравляю, мы внесли изменения в состав разрешений роли пользователя WordPress, не изменив ни строчки PHP кода.

    Я получил информацию о том, как хранятся данные о пользовательских ролях WordPress из этого файла wp-admin\includes\schema.php
    If you wish to change user role capabilities for the WordPress MU blog please read “How to change WordPress MU user role capabilities” post.

    Если изложенный выше материал трудноват для вас либо идея изменить что-либо в пользовательских ролях WordPress посещает вас чаще одного раза в год, то возможно вам будет полезен разработанный мной плагин для WordPress “Редактор ролей пользователей”.
    Он предлагает удобный и простой в использовании интерфейс для редактирования ролей пользователей WordPress.
    Спасибо.

    Tags: ,