Иногда при разработке сайтов приходится настраивать административный интерфейс под клиентов. Например, изменить логотип в административной панели или показать/скрыть некоторые пункты меню.
Эта статья основана на подборке из нескольких материалов по настройке WordPress.

Большая часть кода работает в WordPress 3.1 и выше.

1. Изменяем логотип на странице входа

Для увеличения лояльности клиента или для того, чтобы просто его порадовать, заменим логотип на логотип клиента.

Для этого положим изображения в папку images текущей темы и внесем несколько строчек кода в файл functions.php

/*
 * Заменяем логотип
 */
function my_custom_login_logo() {
  echo '<style type="text/css">
  h1 a { background-image:url('.get_bloginfo('template_directory').'/images/custom-login-logo.gif) !important; }
</style>';
}
add_action('login_head', 'my_custom_login_logo');

С помощью нескольких строчек, мы можем изменить логотип страницы входа без использования плагинов. В WordPress мы можем перехватить любую функцию и изменить настройки по умолчанию путем использования файла functions.php или с помощью плагинов. Используя приведенный выше код, мы использовали хук login_head() и добавили, нашу собственную функции к нему. Подобным образом мы можем пойти еще ​​дальше и добавить свои собственные стили на страницу входа.

2. Изменяем ссылку и подсказку логотипа на странице входа

По умолчанию логотип на странице входа ведет на сайт WordPress. Исправим его на адрес нашего сайта.

/*
 * Изменяем ссылку логотипа
 */
function my_custom_login_url() {
  echo bloginfo('url');  // или любая другая ссылка
}
add_filter('login_headerurl', 'my_custom_login_url');

/*
 * Заменяем подпись логотипа
 */
function my_custom_login_title() {
  echo get_option('blogname'); // или любой другой текст
}
add_filter('login_headertitle', 'my_custom_login_title');

3. Удаление пунктов меню

При создании сайта полезно спрятать от клиента некоторые пункты меню. Это поможет избежать некоторые проблемы. Добавим следующий код в файл 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');

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

Поэтому предлагаю еще один вариант:

/*
 * Удаляем пункты меню из админки
 */
function remove_menus() {
  global $menu;
	
  $restricted = array(
    'index.php', // Консоль
    'edit.php', // Записи
    'upload.php', // Медиафайлы
    'link-manager.php', // Ссылки
    'edit.php?post_type=page', // Страницы
    'themes.php', // Внешний вид
    'tools.php', // Инструменты
    'users.php', // Пользователи
    'options-general.php', // Параметры
    'edit-comments.php', // Комментарии
    'plugins.php', // Плагины
  );
	
  foreach ($menu as $k => $item) {
    if (in_array($item[2] , $restricted)) {
      unset($menu[$k]);
    }
  }
}
add_action('admin_menu', 'remove_menus');

4. Удаляем левую админ-панель

Если нужно полностью скрыть левую админ-панель, то можно воспользоваться следующим кодом, который помещаем в functions.php

/*
 * Скрываем левую панель в админке
 */
function my_remove_adminmenu(){
  global $menu;
	
  $menu = array();  // Очищаем массив с пунктами меню
  // скрываем панль
  echo "<style type='text/css'>#adminmenuwrap, #adminmenuback{display:none!important;} #wpcontent{margin-left:10px!important;}</style>";
}
add_action('admin_head', 'my_remove_adminmenu');

5. Удаление лишних виджетов из консоли WordPress

Некоторые из виджетов совершенно не нужны клиентам и лучше их вообще отключить. Добавим код в файл темы function.php

/*
 * Удаляем виджеты из dashboard
 */
function my_remove_dashboard_widgets() {
  global $wp_meta_boxes;

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

6. Удаляем кнопки с верхней админ-панели

/*
 * Удаляем кнопки с панели администрирования
 */
function my_remove_admin_bar_links() {
  global $wp_admin_bar;
	
  $wp_admin_bar->remove_menu('wp-logo');          // Remove the WordPress logo
  $wp_admin_bar->remove_menu('about');            // Remove the about WordPress link
  $wp_admin_bar->remove_menu('wporg');            // Remove the WordPress.org link
  $wp_admin_bar->remove_menu('documentation');    // Remove the WordPress documentation link
  $wp_admin_bar->remove_menu('support-forums');   // Remove the support forums link
  $wp_admin_bar->remove_menu('feedback');         // Remove the feedback link
  $wp_admin_bar->remove_menu('site-name');        // Remove the site name menu
  $wp_admin_bar->remove_menu('view-site');        // Remove the view site link
  $wp_admin_bar->remove_menu('updates');          // Remove the updates link
  $wp_admin_bar->remove_menu('comments');         // Remove the comments link
  $wp_admin_bar->remove_menu('new-content');      // Remove the content link
  $wp_admin_bar->remove_menu('w3tc');             // If you use w3 total cache remove the performance link
  $wp_admin_bar->remove_menu('my-account');       // Remove the user details tab
}
add_action('wp_before_admin_bar_render', 'my_remove_admin_bar_links');

7. Изменяем сообщение в футере админки

Может понадобиться заменить сообщения в футере на свои, например, вставить ссылку на разработчика. Для этого можно воспользоваться следующим кодом:

/*
 * Правим футер
 */
function remove_footer_admin ()
{
  echo '<span id="footer-thankyou">Developed by <a href="http://www.designerswebsite.com" target="_blank">Your Name</a></span>';
}
add_filter('admin_footer_text', 'remove_footer_admin');

8. Скрываем сообщение «Вы используете WordPress 3.3.1» из виджета консоли «Прямо сейчас»

Мне не хочется показывать это сообщение клиенту. Поэтому я нашел такой способ скрыть эту надпись:

/*
 * Удаляем сообщение о версии WP из dashboard
 */
function my_remove_admin_version_message() {
  echo '<script type="text/javascript">';
  echo ';(function($){ $("#wp-version-message, #dashboard_right_now .table_discussion").hide(); })(jQuery);';
  echo '</script>';
}
add_action('admin_footer', 'my_remove_admin_version_message');

9. Скрываем информацию об используемой теме в виджете консоли «Прямо сейчас»

Совет взят из комментария.

/*
 * Прячем информацию об используемой теме WP из dashboard
 */
function my_remove_admin_theme_message() {
  echo '<script type="text/javascript">';
  echo ';(function($){ $(".versions p").hide(); })(jQuery);';
  echo '</script>';
}
add_action('admin_footer', 'my_remove_admin_theme_message');

  • S I L E N C E

    Очень полезная информация! Спасибо огромное 🙂

  • SuperMail_

    реально спасибо! отличная статья!
    есть небольшое замечание по 8 пункту

    там хорошо бы скрывать ещё и информацию про используемую тему
    echo ‘;(function($){ $(«.versions p»).hide(); })(jQuery);’;

  • вот, а ещё упомяните, пож-та, про плагин Adminimize

  • Гаджи

    Хорошая статья, помогла очень. А как скрыть кнопку «Помощь» в правом верхнем углу? Нашел такой код на другом сайте, но он не помог для версии 3.7

    function hide_help() {
    if (!current_user_can(‘administrator’)){
    echo »;
    }
    }
    add_action(‘admin_head’, ‘hide_help’);

  • Вася

    можете ли подсказать, можно ли убрать эти поля только для участников, а для администратора оставить?