OHyena
../ ./.. /.// /... .. ... /../
Blog Post

Настройка админки WordPress (скрытие элементов меню)

02.07.2017 Admin

Отключить админ-панель в WordPress для всех кроме администраторов

Бывают такие случаи когда надо полностью отключить админ-панель на блоге, но это бывает не всем подходит. Я считаю гораздо удобнее отключить админ-панель частично, т.е. можно отключить админ-панель для всех пользователе кроме администраторов. В этом коротком руководстве мы рассмотрим как это реализовать без плагинов.

Отключаем админ-панель для всех, кроме администраторов.
Давайте приступим, все очень просто. Вставьте приведенный ниже код в файл functions.php:
/* Отключаем админ панель для всех, кроме администраторов. */
if (!current_user_can('administrator')):
show_admin_bar(false);
endif;

Полное отключение админ-панели для всех.
Если Вам админ панель вовсе не нужна на вашем блоге ее можно отключить полностью, для этого просто вставляем этот код в файл темы functions.php:
/* Отключаем админ-панель для всех пользователей. */
show_admin_bar(false);

Или другой вариант, скрыть с помощью CSS
add_action('admin_head', 'kill_adminmenu');
function kill_adminmenu(){
$GLOBALS['menu'] = array();
echo "
<_style type='text/css'>#adminmenuwrap, #adminmenuback{display:none!important;}
#wpcontent{margin-left:10px!important;}</_style>
";
}

Удаление лишних пунктов меню

Чтобы пользователь ненароком не удалил какой-нибудь важный файл нужно запретить ему доступ к определенным функциям.
Для чего, прописываем код в файл темы functions.php:
function remove_menus(){
global $menu;
$restricted = array(__('Dashboard'), __('Posts'), __('Media'), __('Links'), __('Pages'), __('Appearance'), __('Tools'), __('Users'), __('Settings'), __('Comments'), __('Plugins'));
end ($menu);
while (prev($menu)){
$value = explode(' ', $menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
}
}
add_action('admin_menu', 'remove_menus');

Этот код лишь убирает визуально пункты меню, но не запрещает прямой доступ к ним по ссылке.
Теперь разъясню, какие пункты мы закрыли этим кодом:
__(‘Dashboard’) — главная страница админки;
__(‘Posts’) — “Записи”;
__(‘Media’) — “Медиафайлы” (картинки, видео и т.п.);
__(‘Links’) — “Ссылки”;
__(‘Pages’) — “Страницы”;
__(‘Appearance’) — “Внешний вид”;
__(‘Tools’) — “инструменты” (“импорт”, “экспорт”);
__(‘Users’) — “пользователи”;
__(‘Settings’) — пункт меню “Настройки”!
__(‘Comments’) — комментарии;
__(‘Plugins’) — “Плагины”.

Удаляем рубрику «+Добавить» из админ-панели

Теперь хочется отметить некоторые нюансы Консоли управления. Заходим в админку и видим в панели администратора под кнопкой «+Добавить» выплывает подменю «запись», дабы не смутить заказчика, который на самом деле не пишет посты, удалим этот пункт из Панели администратора. Вместе с этим нужно удалить ссылки и комментарии, которые привязаны к этому пункту. Для этого нам понадобится следующий код:
function remove_admin_bar_links() {
global $wp_admin_bar;
$wp_admin_bar->remove_menu('new-content');
$wp_admin_bar->remove_menu('new-link');
$wp_admin_bar->remove_menu('comments');
}
add_action( 'wp_before_admin_bar_render', 'remove_admin_bar_links' );

Добавление своих пунктов админ-панель

Наша панель стала выглядеть пусто и неинтересно, чтобы как-то ее оживить добавим новые пункты и ссылки. Сделать это в WordPress очень легко. Рассмотрим пример, в котором будем добавлять новые продукты на сайт и раздел секций. Здесь заказчик будет добавлять новый контент. Вот как выглядит код:
function add_mycms_admin_bar_link() {
global $wp_admin_bar;
if ( !is_super_admin() || !is_admin_bar_showing() )
return;
$wp_admin_bar->add_menu( array(
'id' => 'add_product_menu', // Может быть любое значение и должно быть уникальным
'title' => __( 'Добавить Продукт'), //Отображение названия в Меню
'href' => __('http://studio-gost.ru/wp-admin/post-new.php?post_type=products'),
));
// Добавить в подменю ссылку "Все продукты"
$wp_admin_bar->add_menu( array(
'parent' => 'add_product_menu', // Уникальный идентификатор родительского меню
'id' => 'view_all_products',
'title' => __( ''),
'href' => __('http://studio-gost.ru/wp-admin/edit.php?post_type=products'),
));
//Добавить в подменю ссылку "Специфика"
$wp_admin_bar->add_menu( array(
'parent' => 'add_product_menu',
'id' => 'my_sections',
'title' => __( 'Специфика'),
'href' => __('http://studio-gost.ru/wp-admin/edit-tags.php?taxonomy=Section&post_type=products'),
));
}
add_action('admin_bar_menu', 'add_mycms_admin_bar_link',25);

Заменяем логотип WordPress на странице входа на сайт

Чтобы придать блогу более индивидуальный вид, прибегают к изменению внешнего вида некоторых служебных страниц, таких как страница авторизации. Ситуацию по изменению логотипа можно изменить, если вставить в файл functions.php используемой вами темы следующий код:
function custom_login_logo(){
echo '
<_style type="text/css">
#login h1 a { background: url('. get_bloginfo('template_directory')
.'/custom_logo.jpg) no-repeat 0 0 !important; }
</_style>';
}
add_action('login_head', 'custom_login_logo');
add_filter( 'login_headertitle', create_function('', 'return false;') );
add_filter( 'login_headerurl', create_function('', 'return get_home_url();') );

Если же Вы хотите сменить логотип, который отображается в админке рядом с названием вашего блога, то вставляем следующий код в файл functions.php в вашей теме:
function custom_admin_logo() {
echo '
<_style type="text/css">
#header-logo { background:url('.get_bloginfo('template_directory')
.'/custom_favicon.png) no-repeat 0 0 !important; }
</_style>';
}
add_action('admin_head', 'custom_admin_logo');

Удаляем логотип WordPress из Панели администратора

Важно! Логотип WordPress находится еще и в административной зоне сайта и в выпадающем меню со ссылками на документацию и форумы поддержки WP. Они также легко удаляются, путем добавления строки к функции, которая описана выше Удаляем рубрику «+Добавить» данной строчки:
$wp_admin_bar->remove_menu('wp-logo');

Или же вставить код целиком:
function remove_admin_bar_links() {
global $wp_admin_bar;
$wp_admin_bar->remove_menu('wp-logo');
}
add_action( 'wp_before_admin_bar_render', 'remove_admin_bar_links' );

Упрощаем ссылку входа

Теперь делаем проще ссылку для входа в WP. Изначальна ссылка выглядит так: http://site.ru/wp-login.php, изменим ее на эту: http://site.ru/login. При этом изменении пользователь будет перенаправляться на http://site.ru/wp-login.php     Для этого вставляем код в functions.php:
/* редирект с login на /wp-login.php и с admin на /wp-admin */
add_action('template_redirect', 'kama_login_redirect');
function kama_login_redirect(){
if( strpos($_SERVER['REQUEST_URI'], 'login')!==false )
$loc = '/wp-login.php';
elseif( strpos($_SERVER['REQUEST_URI'], 'admin')!==false )
$loc = '/wp-admin/';
if( $loc ){
header( 'Location: '.get_option('site_url').$loc, true, 303 );
exit;
}
}

Отключение оповещений об обновлениях

Следующим пунктом идет отключение проверки обновления. Не чего клиентом там лазить, тем более без спецподготовки. Потому что новые обновления могут некорректно работать с старыми плагинами, а иногда это может привести к потери работоспособности сайта. Опять работать будем с файлом functions.php вставляем в него этот код:
add_filter('pre_site_transient_update_core',create_function('$a', "return null;"));
wp_clear_scheduled_hook('wp_version_check');
remove_action( 'load-update-core.php', 'wp_update_plugins' );
add_filter( 'pre_site_transient_update_plugins', create_function( '$a', "return null;" ) );

Удаляем лишние виджеты в консоли

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

/* Удаление виджетов из Консоли WordPress */
function clear_dash(){
$side = &$GLOBALS['wp_meta_boxes']['dashboard']['side']['core'];
$normal = &$GLOBALS['wp_meta_boxes']['dashboard']['normal']['core'];

unset($side['dashboard_quick_press']); //Быстрая публикация
// unset($side['dashboard_recent_drafts']); //Полседние черновики
unset($side['dashboard_primary']); //Блог WordPress
unset($side['dashboard_secondary']); //Другие Нновости WordPress
unset($normal['dashboard_incoming_links']); //Входящие ссылки
// unset($normal['dashboard_right_now']); //Прямо сейчас
unset($normal['dashboard_recent_comments']); //Последние комментарии
unset($normal['dashboard_plugins']); //Последние Плагины
}
add_action('wp_dashboard_setup', 'clear_dash' );

Добавляем собственные виджеты в админ-панель

Если в стандартном пакете функций нет необходимой, можно добавить ее. Для этого в файл functions.phpдобавляем следующий код:

function example_dashboard_widget_function(){
// Показать то, что вы хотите показать
echo "Привет, мир. test";
}
// Создаем функцию, используя хук действия
function example_add_dashboard_widgets() {
wp_add_dashboard_widget('example_dashboard_widget', 'Пример виджета админки', 'example_dashboard_widget_function');
}
// Хук в 'wp_dashboard_setup', чтобы зарегистрировать нашу функцию среди других
add_action('wp_dashboard_setup', 'example_add_dashboard_widgets' );

Меняем цвет шапки

Для изменения цвета шапки административной панели на более подходящий ищем в CSS файле нашего стиля соответствующий фрагмент кода и корректируем его:

add_action('admin_head', 'custom_colors');
function custom_colors() {
echo '
<_style type="text/css">
#wphead{background:#069}
</_style>
';
}

Добавляем справочные сообщения

Для улучшения понимания пользователями работы с блогом стоит внедрить отображение справочных сообщений. Контекстную справку включаем добавлением кода в functions.php:

function my_admin_help($text, $screen) {
// Проверим, только ли для страницы настроек это применимо
if (strcmp($screen, MY_PAGEHOOK) == 0 ) {
$text = 'Вот некоторая полезная информация, которая поможет вам разобраться с плагином...';
return $text;
}
// Пусть по умолчанию штуки с помощью будут и на других страницах панели управления
return $text;
}
add_action( 'contextual_help', 'my_admin_help' );

Просмотр ошибок сервера из панели администратора

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

/* Логи ошибок в виджете админ-панели, в консоли
--------------------------------------------------------------------- */
function slt_PHPErrorsWidget() {
$logfile = $_SERVER['DOCUMENT_ROOT'] . '/../error_log'; // Полный пусть до лог файла
$displayErrorsLimit = 100; // Максимальное количество ошибок, показываемых в виджете
$errorLengthLimit = 300; // Максимальное число символов для описания каждой ошибки
$fileCleared = false;
$userCanClearLog = current_user_can( 'manage_options' );
// Очистить файл?
if( $userCanClearLog && isset( $_GET["slt-php-errors"] )
&& $_GET["slt-php-errors"]=="clear" ){
$handle = fopen( $logfile, "w" );
fclose( $handle );
$fileCleared = true;
}
// Читаем файл
if( file_exists( $logfile ) ){
$errors = file( $logfile );
$errors = array_reverse( $errors );
if ( $fileCleared ) echo '
Файл очищен.
';
if ( $errors ) {
echo '
Ошибок: '. count( $errors ) . '.';
if ( $userCanClearLog )
echo ' [ <_a href="'. admin_url() .'?slt-php-errors=clear">Очистить файл логов ]';
echo '
';
echo '
<_div id="slt-php-errors" style="max-height:500px; overflow:auto;
padding:5px; background-color:#FAFAFA;">';
echo '
<_ol style="padding:0; margin:0;">';
$i = 0;
foreach( $errors as $error ){
echo '
<_li style="padding:2px 4px 6px; border-bottom:1px solid #ececec;">';
$errorOutput = preg_replace( '/\[([^\]]+)\]/', '[$1]', $error, 1 );
if( strlen( $errorOutput ) > $errorLengthLimit ){
echo substr( $errorOutput, 0, $errorLengthLimit ).' [...]';
}
else
echo $errorOutput;
echo '</_li>
';
$i++;
if( $i > $displayErrorsLimit ){
echo '
Набралось больше чем '. $displayErrorsLimit .' ошибок в файле...
';
break;
}
}
echo '</_ol>
</_div>
';
}
else
echo '
Ошибок нет!
';
}
else
echo '
Произошла ошибка чтения лог файла.
';
}
// Добавляем виджет
function slt_dashboardWidgets(){
wp_add_dashboard_widget( 'slt-php-errors', 'PHP errors', 'slt_PHPErrorsWidget' );
}
add_action( 'wp_dashboard_setup', 'slt_dashboardWidgets' );

Упрощение ссылки для входа на сайт

По умолчанию страница входа на сайт расположена по ссылке http://site.ru/wp-login.php. Чтобы сделать ее более удобной, необходимо добавить в файл .htaccess строку:

RewriteRule ^login$ http://site.ru/wp-login.php [NC,L]

Умное отображение PHP-ошибок

Для отключения показа PHP-ошибок всем пользователям (кроме администратора) добавляем в файлfunctions.php строки:

add_action('init', 'enable_errors');
function enable_errors(){
if( $GLOBALS['user_level'] < 5 )
return;
error_reporting(E_ALL ^ E_NOTICE);
ini_set("display_errors", 1);
}

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

Источник и другой источник