WordPress 5.8 – Скрыть или удалить персональные поля с администраторской страницы профиля

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

Существует несколько тем по этому вопросу, но ни одна не обновлялась до WordPress 5.8

Вопрос заключается в том, в 2021 WP 5.8, какой код наиболее чистый или рекомендованный для скрытия полей профиля при создании/редактировании пользователя, кроме основных (имя пользователя, email, имя, фамилия…)?

Когда я говорю “рекомендованный” или “наиболее чистый”, я имею в виду, например, есть ли что-то, что можно удалить “через хук”, как “Цветовая схема администратора”, тогда это будет лучшим вариантом, верно?

Некоторые варианты для других версий WordPress:

Спасибо заранее.

  • Это работает для меня в 5.8.
  • Работает в “добавлении нового пользователя” и в “редактировании пользователя”.
  • “Имя для публичного отображения” управляется с помощью плагина.

Код:

// Удалить поля с страницы профиля администратора
if ( ! function_exists( 'cor_remove_personal_options' ) ) {
    function cor_remove_personal_options( $subject ) {
        $subject = preg_replace('#<h2>'.__("Личные параметры").'</h2>#s', '', $subject, 1); // Удалить заголовок "Личные параметры"
        $subject = preg_replace('#<tr class="user-rich-editing-wrap(.*?)</tr>#s', '', $subject, 1); // Удалить поле "Визуальный редактор"
        $subject = preg_replace('#<tr class="user-comment-shortcuts-wrap(.*?)</tr>#s', '', $subject, 1); // Удалить поле "Горячие клавиши"
        $subject = preg_replace('#<tr class="show-admin-bar(.*?)</tr>#s', '', $subject, 1); // Удалить поле "Панель инструментов"
        $subject = preg_replace('#<h2>'.__("Имя").'</h2>#s', '', $subject, 1); // Удалить заголовок "Имя"
        // $subject = preg_replace('#<tr class="user-display-name-wrap(.*?)</tr>#s', '', $subject, 1); // Поле "Публичное имя" (не работает хорошо при редактировании пользователя. Лучше удалить и управлять с помощью плагина "Принудительное имя и фамилия как публичное имя")
        $subject = preg_replace('#<h2>'.__("Контактная информация").'</h2>#s', '', $subject, 1); // Удалить заголовок "Контактная информация"
        $subject = preg_replace('#<tr class="user-url-wrap(.*?)</tr>#s', '', $subject, 1); // Удалить поле "Веб-сайт" в РЕДАКТИРОВАНИИ ПОЛЬЗОВАТЕЛЯ
        $subject = preg_replace('#<th scope="row"><label for="url(.*?)</th>#s', '', $subject, 1); // Удалить поле "Веб-сайт" в НОВОМ ПОЛЬЗОВАТЕЛЕ (часть 1)
        $subject = preg_replace('#<td><input name="url"(.*?)</td>#s', '', $subject, 1); // Удалить поле "Веб-сайт" SUKINOZ в НОВОМ ПОЛЬЗОВАТЕЛЕ (часть 2)  
        $subject = preg_replace('#<h2>'.__("О себе").'</h2>#s', '', $subject, 1); // Удалить заголовок "О себе"
        $subject = preg_replace('#<h2>'.__("О пользователе").'</h2>#s', '', $subject, 1); // Удалить заголовок "О пользователе"      
        $subject = preg_replace('#<tr class="user-description-wrap(.*?)</tr>#s', '', $subject, 1); // Удалить поле "Биографическая информация"
        $subject = preg_replace('#<tr class="user-profile-picture(.*?)</tr>#s', '', $subject, 1); // Удалить поле "Фото профиля"
        return $subject;
    }

    function cor_profile_subject_start() {
        if ( ! current_user_can('manage_options') ) {
            ob_start( 'cor_remove_personal_options' );
        }
    }

    function cor_profile_subject_end() {
        if ( ! current_user_can('manage_options') ) {
            ob_end_flush();
        }
    }
}
add_action( 'admin_head', 'cor_profile_subject_start' );
add_action( 'admin_footer', 'cor_profile_subject_end' );

// Удалить поля с страницы профиля администратора через JS, чтобы скрыть поле псевдонима, которое является обязательным
function remove_personal_options(){
    if ( ! current_user_can('manage_options') ) { // 'update_core' может быть более подходящим
        echo '<script type="text/javascript">jQuery(document).ready(function($) {
            $(\'form#your-profile tr.user-nickname-wrap\').hide(); // Скрыть поле "псевдоним"
        });</script>';
    }
}
add_action('admin_head','remove_personal_options');

// Удаляет возможность изменения цвета темы для пользователей
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

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

Скрытие или удаление полей профиля пользователей в WordPress 5.8: Наилучшие практики

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

Актуальность проблемы

При использовании WordPress администраторы и редакторы могут сталкиваться с избыточным количеством полей на странице редактирования профиля пользователей. Это может включать в себя такие поля, как "Общая информация", "Контактная информация" и другие личные данные. Удаление или скрытие этих полей может иметь практические преимущества, например, избавление от ненужной информации, что в свою очередь позволяет сосредоточиться на основных данных пользователей.

Рекомендованный код для удаления полей профиля

Приведенный ниже кодовый фрагмент демонстрирует, как можно скрыть или удалить ненужные поля при помощи хуков и фильтров WordPress. Это решение проверено и работает на версии 5.8.

// Удаление полей на странице профиля администратора
if ( ! function_exists( 'cor_remove_personal_options' ) ) {
    function cor_remove_personal_options( $subject ) {
        $subject = preg_replace('#<h2>'.__("Личные настройки").'</h2>#s', '', $subject, 1); // Удаление заголовка "Личные настройки"
        $subject = preg_replace('#<tr class="user-rich-editing-wrap(.*?)</tr>#s', '', $subject, 1); // Удаление поля "Визуальный редактор"
        $subject = preg_replace('#<tr class="user-comment-shortcuts-wrap(.*?)</tr>#s', '', $subject, 1); // Удаление поля "Сочетания клавиш"
        $subject = preg_replace('#<tr class="show-admin-bar(.*?)</tr>#s', '', $subject, 1); // Удаление поля "Панель инструментов"
        // Продолжение удаления других полей...
        return $subject;
    }

    function cor_profile_subject_start() {
        if ( ! current_user_can('manage_options') ) {
            ob_start( 'cor_remove_personal_options' );
        }
    }

    function cor_profile_subject_end() {
        if ( ! current_user_can('manage_options') ) {
            ob_end_flush();
        }
    }
}
add_action( 'admin_head', 'cor_profile_subject_start' );
add_action( 'admin_footer', 'cor_profile_subject_end' );

// Удаление возможности изменения цветовой схемы
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

В этом коде используется метод preg_replace, который позволяет заменить или удалить HTML-элементы на странице. Убедитесь, что вы используете актуальные переводы для заголовков и полей.

Скрытие обязательных полей с помощью JS

Для скрытия полей, которые являются обязательными, таких как "Псевдоним", можно использовать JavaScript. Данный подход позволяет скрыть поле без удаления его из DOM:

function remove_personal_options(){
    if ( ! current_user_can('manage_options') ) { 
        echo '<script type="text/javascript">jQuery(document).ready(function($) {
            $(\'form#your-profile tr.user-nickname-wrap\').hide(); // Скрыть поле "Псевдоним"
        });</script>';
    }
}
add_action('admin_head','remove_personal_options');

Заключение

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

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

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