Недавно мой хороший знакомый спросил меня: «а как выключить ненужные виджеты в панели администратора 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 под заказчика?