Можно ли создать пользовательскую администраторскую страницу для пользователей?

Вопрос или проблема

Я хочу сильно ограничить полномочия пользователя на сайте. Я не хочу давать пользователю доступ к консоли администрирования, но хочу позволить ему редактировать свое имя пользователя, электронную почту и пароль.

Все, что я сделал до сих пор, было кастомным (много wp_query), и я не использовал никаких плагинов пока и хотел бы оставить это так, если получится. Поэтому, возможно ли создать кастомную страницу, где пользователь сможет редактировать свое имя пользователя, электронную почту и пароль?

Предположим, вы хотите показать только некоторые элементы страницы администратора для определенного типа пользователя, эта страница может помочь вам начать: https://www.johnparris.com/how-to-restrict-access-to-menu-items-in-the-wordpress-admin/. Там не так много подробностей, но это может быть началом.

Вы затем ограничите доступ на основе уровня входа пользователя (редактор, подписчик и т. д.). Или создадите новый уровень доступа и используете его для ограничения доступа.

Чтобы начать изучение уровней доступа в админке и того, что они могут делать, начните здесь: https://codex.wordpress.org/Roles_and_Capabilities. Эта страница содержит ссылки на плагины, которые могут делать то, что вам нужно (или которые могут предоставить вам отправную точку для создания вашего собственного плагина).

Ответ или решение

Да, создание пользовательской административной страницы, где пользователи могли бы изменять такие данные, как имя пользователя, электронная почта и пароль, вполне возможно, особенно в контексте WordPress. Если вы предпочитаете не использовать плагины и уже имеете определенный опыт работы с кастомными запросами wp_query, вы можете разработать решение, которое полностью соответствует вашим требованиям, и в то же время сохранить высокий уровень безопасности и функциональности.

Теория

В WordPress роль пользователя и система возможностей (capabilities) играют ключевую роль в определении того, к каким ресурсам и функциям у него есть доступ. По умолчанию существует несколько ролей, таких как администратор, редактор, автор, подписчик и другие, каждая из которых имеет определенный набор возможностей. Однако, базовые роли могут быть недостаточно гибкими для достижения ваших целей, поэтому создание пользовательской роли с определённым набором возможностей может стать отличным решением.

Пример

Рассмотрим задачу ограничения доступа пользователя к стандартной админ-консоли, при этом предоставив возможность редактирования только личных данных. В центре этого решения будет пользовательская роль и возможность ограниченного интерфейса:

  1. Создайте новую пользовательскую роль с необходимым набором возможностей. Используя функции WordPress такие, как add_role(), можно создать новую роль "Ограниченный пользователь", которая будет настроена только для изменения профиля (name, email, password).

  2. Создайте пользовательскую форму в фронте вашего сайта. Эта форма будет предназначена исключительно для изменений профиля пользователя. Можно использовать WP функции как wp_get_current_user() для получения информации о текущем пользователе и wp_update_user() для обновления пользовательских данных. Интерфейс для пользователя должен быть удобным и обеспечивать хорошую пользовательскую впечатление.

  3. Настройте валидацию и безопасность данных. Безопасность должна быть на первом месте. Используйте нативные функции nonce, такие как wp_nonce_field() и check_admin_referer(), для предотвращения CSRF атак.

Применение

  1. Создание новой роли:

    Для начала, добавим новый код в ваш файл темы functions.php для регистрации новой пользовательской роли:

    function add_custom_user_role() {
       add_role('limited_user', __('Ограниченный пользователь'), array(
           'read' => true, // стандартный доступ для чтения
           'edit_posts' => false, // запрет на редактирование постов
           'edit_profile' => true, // возможность редактирования профиля
       ));
    }
    add_action('init', 'add_custom_user_role');
  2. Разработка фронтэнд формы:

    В файле шаблона создайте форму, которая будет использовать следующие поля: имя пользователя, электронная почта и пароль. Например:

    <form id="profile-edit-form" method="post">
       <?php wp_nonce_field('update-user-profile'); ?>
       <label for="user-name">Имя пользователя</label>
       <input type="text" name="user_name" value="<?php echo esc_attr($current_user->user_login); ?>" />
    
       <label for="user-email">Электронная почта</label>
       <input type="email" name="user_email" value="<?php echo esc_attr($current_user->user_email); ?>" />
    
       <label for="user-password">Пароль</label>
       <input type="password" name="user_password" />
    
       <input type="submit" value="Сохранить изменения" />
    </form>
  3. Обработка данных формы:

    В файле темы, где расположена обработка формы, добавьте следующую функцию:

    function update_user_profile() {
       if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'update-user-profile')) {
           die('Проверка безопасности не пройдена');
       }
    
       $user_id = get_current_user_id();
       $user_data = array(
           'ID' => $user_id,
           'user_login' => sanitize_user($_POST['user_name']),
           'user_email' => sanitize_email($_POST['user_email']),
       );
    
       if (!empty($_POST['user_password'])) {
           $user_data['user_pass'] = $_POST['user_password'];
       }
    
       $user_id = wp_update_user($user_data);
    
       if (is_wp_error($user_id)) {
           echo 'Ошибка обновления профиля';
       } else {
          echo 'Профиль успешно обновлён';
       }
    }
    
    add_action('init', 'update_user_profile');

В итоге, вы создаете безопасную и функциональную систему, предоставляющую пользователям доступ к редактированию только конкретных разрешенных данных. Это позволяет не только удержать контроль над содержимым вашего сайта, но и обеспечить удобство использования посредством интерактивного пользовательского интерфейса наряду с требованиями безопасности.

Оцените материал
Добавить комментарий

Капча загружается...