Настраиваем административную панель WordPress под заказчика

Настраиваем административную панель Wordpress под заказчика

Недавно мой хороший знакомый спросил меня: «а как выключить ненужные виджеты в панели администратора WordPress для всех пользователей?». Уже было собравшись ответить — «воспользуйся закладкой „настройки экрана“ в правом верхнем углу» я вспомнил один момент — меня всегда раздражало, что эта опция не является глобальной, то есть настраивается отдельно для каждой учетной записи вручную, после авторизации.

Кстати, именно по этой причине когда-то мне пришлось довольно долго разбираться с системой переадресации пользователя в WordPress после авторизации из front-end сайта. Проблема заключалась в том, что после входа, пользователь отправлялся в админ-часть, которая ему а) абсолютно не была нужна и б) не смотря на полностью урезанные права, вызывала нездоровое любопытство.

Кроме того, многие заказчики, получая «в руки» административную часть, начинали задавать массу вопросов по ее функционалу — зачем нужен тот или иной блок или виджет, и как его использовать на сайте. Но вся проблема-то заключалась в том, что на практике эти функции не были задействованы и существовали исключительно потому, что были установлены по-умолчанию.

Третьей стороной является тот факт, что иногда нужно назначить заказчику доступ уровня «Администратор», но при этом отключать, например, возможность изменения параметров — что называется, «во избежание».

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

Обратите внимание! Все строки кода добавляются в файл functions.php вашей темы WordPress. Если этого файла в вашей теме нет — просто его создайте. Если есть — обязательно сделайте резервную копию перед внесением любых изменений!

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

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

// Удаляем виджеты в консоли
function example_remove_dashboard_widgets() {
global $wp_meta_boxes;
// Вручную указываем - какие виджеты удалять
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
}
add_action('wp_dashboard_setup', 'example_remove_dashboard_widgets' );

Этот код убирает виджет «Быстрая публикация» из консоли. Для того, чтобы удалить остальные, нужно указать их код.

Вот перечень названий разных виджетов:

«Прямо сейчас»

$wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']

«Свежие комментарии»:

$wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']

«Входящие ссылки»:

$wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']

«Плагины»:

$wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']

«Быстрая публикация»

$wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']

«Свежие черновики»

$wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']

Если вы хотите удалить их все, тогда код будет выглядеть следующим образом:

// Удаляем виджеты в консоли
function example_remove_dashboard_widgets() {
global $wp_meta_boxes;
unset($wp_meta_boxes['dashboard']['side']['core']['recent_drafts']);
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
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']['normal']['core']['dashboard_plugins']);
}
add_action('wp_dashboard_setup', 'example_remove_dashboard_widgets' );

Добавляем пользовательский виджет к консоли WordPress

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

// Добавляем простой текстовый виджет
function example_dashboard_widget_function() {
echo "Текст в виджете";
}
function example_add_dashboard_widgets() {
wp_add_dashboard_widget('example_dashboard_widget', 'Заголовок виджета', 'example_dashboard_widget_function');
}
add_action('wp_dashboard_setup', 'example_add_dashboard_widgets' );

Убираем пункты меню

Еще одним способом упростить жизнь клиентов — будет удаление ненужных ссылок из административного меню WordPress.

Например, сайт клиента использует страницы и записи, но не использует ссылки. Соответственно, возникает резонный вопрос — какой смысл все время держать этот блок на странице, если его функционал не настроен и не используется?

Удалим блок «Ссылки» из боковой колонки:

// Убираем пункты меню
function remove_menus()
{
global $menu;
// Массив разделов меню, которые мы планируем удалить
$restricted = array( __('Links'));
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');

Переменная $restricted содержим массив всех элементов меню, которые мы хотим удалить. Соответственно, если мы хотим удалить не только ссылки, но и другие элементы, используем следующий код:

// Убираем пункты меню
function remove_menus()
{
global $menu;
// Массив разделов меню, которые мы планируем удалить
$restricted = array( __('Links'),__('Tools'),__('Settings'),__('Comments'));
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');

Таким образом, мы удалили «Ссылки», «Инструменты», «Настройки» и «Комментарии».

Удаляем мета-поля с экрана редактирования

Еще одним «сборником разрозненной информации» является экран создания / редактирования записей и страниц. Честно говоря, при «штатном» создании новой записи или страницы, все эти поля не используются практически никогда. Но они занимают место и добавляют неудобств при работе.

Нижеследующая функция позволит убрать блок «Произвольные поля» со страницы редактирования:

// Убираем блок Произвольные поля
function remove_extra_meta_boxes() {
remove_meta_box( 'postcustom' , 'post' , 'normal' ); // remove custom fields from posts
remove_meta_box( 'postcustom' , 'page' , 'normal' ); // remove custom fields from pages
}
add_action( 'admin_menu' , 'remove_extra_meta_boxes' );

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

// Убираем большинство блоков на странице редактирования
function remove_extra_meta_boxes() {
remove_meta_box( 'postcustom' , 'post' , 'normal' ); // произвольные поля для записей
remove_meta_box( 'postcustom' , 'page' , 'normal' ); // произвольные поля для страниц
remove_meta_box( 'postexcerpt' , 'post' , 'normal' ); // цитата для записей
remove_meta_box( 'postexcerpt' , 'page' , 'normal' ); // цитата для страниц
remove_meta_box( 'commentsdiv' , 'post' , 'normal' ); // свежие комментарии для записей
remove_meta_box( 'commentsdiv' , 'page' , 'normal' ); // свежие комментарии для страниц
remove_meta_box( 'tagsdiv-post_tag' , 'post' , 'side' ); // метки для записей
remove_meta_box( 'tagsdiv-post_tag' , 'page' , 'side' ); // метки для страниц
remove_meta_box( 'trackbacksdiv' , 'post' , 'normal' ); // трекбеки для записей
remove_meta_box( 'trackbacksdiv' , 'page' , 'normal' ); // трекбеки для страниц
remove_meta_box( 'commentstatusdiv' , 'post' , 'normal' ); // разрешить комментарии для записей
remove_meta_box( 'commentstatusdiv' , 'page' , 'normal' ); // разрешить комментарии для страниц
remove_meta_box('slugdiv','post','normal'); // ссылки для записей
remove_meta_box('slugdiv','page','normal'); // ссылки для страниц
remove_meta_box('pageparentdiv','page','side'); // родительская страница
}
add_action( 'admin_menu' , 'remove_extra_meta_boxes' );

Обратите внимание на комментарии к функции — там вы увидите, для чего предназначена каждая строка.

Добавляем / Редактируем колонки в список записей

При просмотре списка записей / страниц в административной части WordPress, иногда бывает необходимо выключить определенные колонки, чтобы они попросту не занимали место. Например, если вы не используете метки для записей, то какой смысл держать на странице этот столбец?

Нижеследующая функция показывает колонки так, как они установлены по-умолчанию. То есть, если вы добавите ее в ваш functions.php — ничего не изменится.

// Удаляем колонки на странице записей
function remove_post_columns($posts_columns) {
$posts_columns = array(
"cb" => "",
"title" => "Title",
"author" => "Author",
"categories" => "Categories",
"tags" => "Tags",
"date" => "Date",
"comments" => '
<div class="vers"><img src="' . esc_url( admin_url( 'images/comment-grey-bubble.png' ) ) . '" alt="Comments" /></div>
',
);
return $posts_columns;
}
add_filter('manage_posts_columns', 'remove_post_columns');

А вот эта функция позволит убрать столбец «Метки».

// Удаляем столбец Метки
function remove_post_columns($posts_columns) {
$posts_columns = array(
"cb" => "",
"title" => "Title",
"author" => "Author",
"categories" => "Categories",
"date" => "Date",
"comments" => '
<div class="vers"><img src="' . esc_url( admin_url( 'images/comment-grey-bubble.png' ) ) . '" alt="Comments" /></div>
',
);
return $posts_columns;
}
add_filter('manage_posts_columns', 'remove_post_columns');

Просто удалив строку “tags” => “Tags”, мы убрали колонку «Метки». Кроме того, мы можем поменять порядок отображения колонок, поменяв порядок строк в массиве «$post_columns».

// Меняем порядок колонок на странице записей
function remove_post_columns($posts_columns) {
// Delete an existing column
$posts_columns = array(
"cb" => "",
"title" => "Title",
"date" => "Date",
"tags" => "Tags",
"categories" => "Categories",
"author" => "Author",
"comments" => '
<div class="vers"><img src="' . esc_url( admin_url( 'images/comment-grey-bubble.png' ) ) . '" alt="Comments" /></div>
',
);
return $posts_columns;
}
add_filter('manage_posts_columns', 'remove_post_columns');

Добавление этой функции позволило нам организовать следующий порядок: флаг выбора — Заголовок — Дата — Метки — Категория — Автор — Комментарии.

Заменяем стандартный логотип WordPress в админ-панели на собственный

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

// Добавляем свой логотип в админ-панель WordPress
add_action('admin_head', 'my_custom_logo');
function my_custom_logo() {
   echo '<style type="text/css">
         #header-logo { background-image: url('.get_bloginfo('template_directory').'/images/custom-logo.gif) !important; }</style>';
}

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

Не все логотипы хорошо смотрятся на синем фоне, поэтому заодно изменим и цвет.

// Меняем цвета административной панели WordPress
function custom_colors() {
   echo '<style type="text/css">#wphead{background:#069}</style>';
}
add_action('admin_head', 'custom_colors');

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

Итак, как Вам идея кастомизировать административную панель WordPress под заказчика?

38 комментариев к “Настраиваем административную панель WordPress под заказчика”

  1. Спасибо за мануальчик. В принципе сам все могу, но отправил в закладки, ибо лень — страшная сила.

    ОтветитьОтветить
  2. Оо. Шик. Для админки я пользуюcь adminimize — отличный планин для удаления ненужных пунктов меню.

    А вообще, коли продаёшь свою работу по настройке и обслуживанию WP — делай всё до конца и правильно.

    Спасибо за пост.

    ОтветитьОтветить
  3. Товарищ! Заслужили орден, как минимум. :) Начать с того, что я не раз задавался вопросом, зачем мне некоторые виджеты в админке, но даже не удосужился посмотреть настройки экрана.

    Ну а последующая инфа была просто откровением. После прочтения в очередной раз почувствовал себя знатоком WP. :)

    Причём, приятно, что изменения вносятся в файл functions.php темы, и не придётся вносить их повторно после обновления движка

    ОтветитьОтветить
  4. До недавних пор не задумывался над этой проблемой, поскольку сайты на ВП делал только для себя. Но сейчас нарисовался один заказчик, поэтому возьму себе на заметку этот мануал. Сегодня ночью помедитирую над ним)

    ОтветитьОтветить
  5. Где же вы раньше были, ввернее где я был, что мне не попался Ваш блог? Тогда у меня был ресурс на вордпрессе. Скажите, а про блогспот у Вас нет рекомендаций?

    ОтветитьОтветить
  6. Спасибо за подробную инструкцию, буду пробовать.

    ОтветитьОтветить
  7. Пока на заказ сайты не делаю, но поможет настроить админку для одного знакомого которому сделал блог. сенки)

    ОтветитьОтветить
  8. довольно интересно получилось, бывало нужно было подобное делать.

    ОтветитьОтветить
  9. В целом, нашел много интересного. Но поскольку, давиче, уволил всех своих клиентов — наслаждаться этими примочками буду сам :)

    ОтветитьОтветить
  10. Довольно подробно и доступно расписано. Возьму пост в качестве руководства для быстрых действий без заморочек.

    ОтветитьОтветить
  11. я не пойму. а зачем виджеты в админке убирать через functions.php? убрать же можно и через ту же самую админку

    ОтветитьОтветить
  12. блин хочу сделать себе сайт на вордпрессе, только разобраться в нем не могу... может напишешь статейку о том как это сделать?)

    ОтветитьОтветить
  13. классный мануал!!!мне понравилось! заказчики всякие бывают)))

    ОтветитьОтветить
  14. Супер! Когда-то посещала идея: «возможно ли повыбрасывать ненужное с админки?», но как-то забылось, и вот оно — решение, само нашлось! Спасибо! Почищу свою одмин-панель)) Да и заказчикам, реально, поотрубать ненужный функционал можно!

    Класс, еще раз спасибо! В закладки однозначно! :)

    ОтветитьОтветить
  15. Начал осваивать ВП. Много интересного почерпнул на сайте. А насколько нужно править вид админки для себя, а не заказчика. И можно под каждого юзера настроить вид? В смысле под авторов, модераторов...

    ОтветитьОтветить
  16. Спасибо за статью. Я решил создать свой блог и 3 дня только парился с установкой движка на хостинг. Мне показалось что WordPress немного неудобный движок. А Вы с другими работали? Есть ли какаято альтернатива?

    ОтветитьОтветить
  17. @ Алексей: альтернатив достаточно много — по-сути, собрать блог можно практически на любой платформе. Можно на Joomla, Drupal, Text Pattern, Symphony, Posterous и т.д.

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

    Ну и кроме того, смотря кто что понимает под понятием «неудобный» :)

    ОтветитьОтветить
  18. Да статья для меня очень полезная. Давно искал что то подобное. Теперь буду править свой блог.

    ОтветитьОтветить
  19. Кто знает, подскажите какие нибудь плагины которыми можно поменять внешний вид страниц профиля подписчиков и авторизации на сайте.

    ОтветитьОтветить
  20. Премного благодарен автору! Сложно найти какие-либо слова, поэтому просто спасибо, человеческое! :)

    ОтветитьОтветить
  21. Здравтсвуйте, как убрать блок с миниатюрой из поста и записей?

    Я попробовала вставить

    remove_meta_box ('postimagediv' , 'post' , 'normal' ); // миниатюра для записей

    remove_meta_box ('postimagediv' , 'page' , 'normal' ); // миниатюра для страницы

    но не получилось. Подскажите пожалуйста!

    И второй вопрос:

    Хтелось бы заменить и цвет ссылок в админке, и общий фон, как это сделать?

    После вставки последней функции у меня изенилась только блок где лого.

    Заранее, большое спасибо!

    ОтветитьОтветить
  22. @Марина:

    как убрать блок с миниатюрой из поста и записей?

    Если Вы хотите убрать этот блок, значит, как я понимаю, сама миниатюра Вам не нужна? Тогда просто отключите эту функцию в functions.php.

    Хтелось бы заменить и цвет ссылок в админке, и общий фон, как это сделать?

    Именно использование последней функции и меняет цвета. У меня этот код работает, посмотрите — возможно, Вы что-то сделали не так. Для того, чтобы вносить дополнительные изменения, нужно посмотреть как называется тот или иной стиль в самом WP.

    Либо же, нужно править CSS файл самого WP, но это чревато его заменой после обновления.

    ОтветитьОтветить
  23. @Yaroslav.CH: Спасибо за ответ! постараюсь разобраться. Если получиться, напишу в чем была проблема )))

    ОтветитьОтветить
  24. Как убрать вкладку «помощь» ? Или отредактировать содержимое...

    ОтветитьОтветить
  25. Представьте ситуацию наоборот. Хотела самостоятельно заняться SEO-оптимизацией. Полезла в свой сайт. Сайт двуязычный. На родном языке есть плагин All in One SEO, активный, постраничный. На русском этот же плагин, я так поняла, есть, но не активный. Разделов «Внешний вид» и «Плагины»в меню WordPress моего сайта нет. Человека, который делал сайт, исчез. Телефон не берет, на письма не отвечает. Не обижала, все оплачено. Вроде, в нормальных отношениях. Почему-то версии WordPress в каждом языке разные. Зачем мне сайт, в котором нельзя прописать на тайтлы, ни дистрипшены, ни остальное. Это по поводу убрать стандартные кнопки. Боитесь просто, что, не дай Бог, клиент будет знающий. Дурить незнающего легче. Это уже моральная сторона вопроса. Хотя, когда мне говорят мастера, да те же строители — «это вам не нужно» — меня начинает трясти. Даже сам человек не знает, что ему нужно — читайте Льва Николаевича Толстого, а уж другой человек... Разозлило. А что с сайтом делать не знаю. Просто возможность и стоимость консультаций надо оговаривать. А не делать людей дураками.

    ОтветитьОтветить
  26. Здравствуйте. Очень нужна помощь. Ситуация следующая.

    Есть кастомный тип поста. Для него создана кастомная тасономия. В этой таксономии есть элемент под названием «Универсальный». Нужен механизм, который уберет возможность удалять этот элемент. По аналогии с категориями для постов. Там есть Uncategorized и его невозможно удалить.

    Спасибо!

    ОтветитьОтветить
  27. @paeto4ka: честно говоря, не очень представляю как это реализовать, да и не совсем ясно — зачем это вообще нужно.

    ОтветитьОтветить
  28. Здравствуйте!

    А как сделать для пользователей чтоб и их административная часть (даже усеченная) была бы не резиновая, а как и сайт — с фиксированной шириной, типа css body:1024px ?

    Ну и цвета соответствующие цветам сайта, да и шапку присобачить)

    было бы круто.

    Спасибо

    ОтветитьОтветить
  29. А если нет виджетов в админ панели вообще, их просто нет, как их добавить в админ панель, то есть тема сайта самодельная и виждетов в ней нет, как их добавить, очень нужны. Ответе пожалуйста на мыло.

    ОтветитьОтветить
  30. Большое спасибо, а то из-за большого количества столбцов слишком узкие стали, ничего не видно было, убрала лишние

    ОтветитьОтветить

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *