Удаление раздела Personal Options из профиля
Я хочу скрыть/удалить раздел Personal Options на странице Ваш профиль (wp-admin/profile.php
) в админ-панели.
Я знаю, что существуют решения для этого, но они используют jQuery для скрытия этого раздела. Это работает, но когда у пользователя отключен JavaScript в браузере, раздел снова появляется. Поэтому это не является правильным способом удаления Personal Options.
Есть ли способ удалить раздел Personal Options из исходного HTML кода страницы? Имеется в виду без использования jQuery или CSS-хаков, или модификации основных файлов.

Это должно сработать
// удаляет настройки цветовой схемы в `profile.php`
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
if ( ! function_exists( 'cor_remove_personal_options' ) ) {
/**
* Удаляет оставшиеся опции 'Визуальный редактор', 'Горячие клавиши' и 'Панель инструментов'.
*/
function cor_remove_personal_options( $subject ) {
$subject = preg_replace( '#<h3>Персональные настройки</h3>.+?/table>#s', '', $subject, 1 );
return $subject;
}
function cor_profile_subject_start() {
ob_start( 'cor_remove_personal_options' );
}
function cor_profile_subject_end() {
ob_end_flush();
}
}
add_action( 'admin_head-profile.php', 'cor_profile_subject_start' );
add_action( 'admin_footer-profile.php', 'cor_profile_subject_end' );
Также, не забудьте отметить предыдущие вопросы как решенные :)

это потрясающе, но как заставить это работать в WP 3.4? удален только выбор цветовой схемы. вероятно, потому что я не могу найти файлы admin_head-profile.php
и admin_footer-profile.php
в ядре. идеи? большое спасибо.

Вы уверены, что это не работает? Я только что использовал это на новой установке, и все работало нормально. Обратите внимание, вам нужно отредактировать приведенный выше код, если вы используете другой язык. Также вот некоторая информация о admin_head-profile.php
и admin_footer-profile.php
: http://codex.wordpress.org/Plugin_API/Action_Reference#Administrative_Actions

@CorvanNoorloos Спасибо за это, есть ли способ оставить опцию, позволяющую пользователям выбирать, показывать ли им панель инструментов или нет?

Принятый ответ не работает с версией 4.8
Вот актуальный и упрощенный код, который должен работать с любой версией:
// удаляет опции выбора цветовой схемы админки
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
// Удаляет оставшиеся опции 'Визуальный редактор', 'Горячие клавиши' и 'Панель инструментов'
add_action( 'admin_head', function () {
ob_start( function( $subject ) {
$subject = preg_replace( '#<h[0-9]>'.__("Персональные настройки").'</h[0-9]>.+?/table>#s', '', $subject, 1 );
return $subject;
});
});
add_action( 'admin_footer', function(){
ob_end_flush();
});

Как раз пытался разобраться с этим и наткнулся на этот ответ. Приведенный выше код от Cor van больше не работает, но с небольшим изменением в add_action его можно заставить работать.
Все что нужно сделать - изменить последние две строки с:
add_action( 'admin_head-profile.php', 'cor_profile_subject_start' );
add_action( 'admin_footer-profile.php', 'cor_profile_subject_end' );
на
add_action( 'admin_head-user-edit.php', 'cor_profile_subject_start' );
add_action( 'admin_footer-user-edit.php', 'cor_profile_subject_end' );
Таким образом, окончательный код будет выглядеть примерно так:
if ( ! function_exists( 'cor_remove_personal_options' ) ) {
/**
* Удаляет оставшиеся опции 'Визуальный редактор', 'Горячие клавиши' и 'Панель инструментов'.
*/
function cor_remove_personal_options( $subject ) {
$subject = preg_replace( '#<h3>Personal Options</h3>.+?/table>#s', '', $subject, 1 );
return $subject;
}
function cor_profile_subject_start() {
ob_start( 'cor_remove_personal_options' );
}
function cor_profile_subject_end() {
ob_end_flush();
}
}
add_action( 'admin_head-user-edit.php', 'cor_profile_subject_start' );
add_action( 'admin_footer-user-edit.php', 'cor_profile_subject_end' );

Благодаря комментарию от @Per мне удалось заставить это работать в версии 4.5.2
// удаляет опции выбора цветовой схемы админки
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
if ( ! function_exists( 'cor_remove_personal_options' ) ) {
/**
* Удаляет оставшиеся опции 'Визуальный редактор', 'Горячие клавиши' и 'Панель инструментов'.
*/
function cor_remove_personal_options( $subject ) {
$subject = preg_replace( '#<h2>Персональные настройки</h2>.+?/table>#s', '', $subject, 1 );
return $subject;
}
function cor_profile_subject_start() {
ob_start( 'cor_remove_personal_options' );
}
function cor_profile_subject_end() {
ob_end_flush();
}
}
add_action( 'admin_head', 'cor_profile_subject_start' );
add_action( 'admin_footer', 'cor_profile_subject_end' );`

Вот моё решение на CSS, протестированное в WordPress 4.9.8
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
add_action( 'admin_head', function(){
ob_start(); ?>
<style>
#your-profile > h2,
.user-rich-editing-wrap,
.user-syntax-highlighting-wrap,
.user-comment-shortcuts-wrap,
.user-admin-bar-front-wrap {
display: none;
}
</style>
<?php ob_end_flush();
});

Хочу уточнить, что данный код не будет работать в локализованных версиях WordPress из-за жестко заданной строки Personal Options
. Я не могу предложить простое решение этой проблемы, но буду рад любым предложениям.
Я бы добавил это как комментарий, но у меня недостаточно репутации для комментирования.
Также пользуюсь возможностью повторно опубликовать обновленный код для WordPress версии 3.9.
Вот он:
// удаляет опции выбора цветовой схемы в `profile.php`
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
if ( ! function_exists( 'cor_remove_personal_options' ) ) {
/**
* Удаляет оставшиеся опции 'Визуальный редактор', 'Горячие клавиши' и 'Панель инструментов'.
*/
function cor_remove_personal_options( $subject ) {
$subject = preg_replace( '#<h3>Personal Options</h3>.+?/table>#s', '', $subject, 1 );
return $subject;
}
function cor_profile_subject_start() {
ob_start( 'cor_remove_personal_options' );
}
function cor_profile_subject_end() {
ob_end_flush();
}
}
add_action( 'admin_head', 'cor_profile_subject_start' );
add_action( 'admin_footer', 'cor_profile_subject_end' );
Повторюсь, если вы заранее знаете язык вашей установки WordPress, замените строку Personal Options
на локализованную версию для вашего языка. Например, для итальянского нужно использовать Impostazioni personali
.

Я нашел это решение на: https://premium.wpmudev.org/blog/how-to-simplify-wordpress-profiles-by-removing-personal-options/?ptm=c&utm_expid=3606929-108.O6f5ypXuTg-XPCV9sY1yrw.2
function hide_personal_options(){
echo "\n" . '<script type="text/javascript">jQuery(document).ready(function($) {
$(\'form#your-profile > h3:first\').hide(); $(\'form#your-profile >
table:first\').hide(); $(\'form#your-profile\').show(); });</script>' . "\n";
}
add_action('admin_head','hide_personal_options');
Если вам нужно более точное удаление или скрытие дополнительных элементов, посмотрите здесь: https://isabelcastillo.com/hide-personal-options-wordpress-admin-profile
Вы можете просто добавить эти строки в функцию.

Я убираю только заголовок и использую CSS для скрытия первой таблицы...
Для меня в 2023 году это работает:
// удаляет опции цветовой схемы админки
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
if ( ! function_exists( 'cor_remove_personal_options' ) ) {
/**
* Удаляет оставшиеся опции 'Визуальный редактор', 'Горячие клавиши' и 'Панель инструментов'.
*/
function cor_remove_personal_options( $subject ) {
$subject = preg_replace( '#<h[0-9]>'.__("Персональные настройки").'</h[0-9]>#s', '<style>#your-profile>.form-table {display:none} #your-profile>.form-table ~ .form-table {display:block}</style>', $subject, 1 );
return $subject;
}
function cor_profile_subject_start() {
ob_start( 'cor_remove_personal_options' );
}
function cor_profile_subject_end() {
ob_end_flush();
}
}
add_action( 'admin_head', 'cor_profile_subject_start' );
add_action( 'admin_footer', 'cor_profile_subject_end' );
