11 ХИТОВОСТЕЙ ДЛЯ АДМИНИСТРАЦИОННОЙ ПАНЕЛИ WORDPRESS
С версии 3.1 WordPress представил "Административную панель" (Admin Bar), которая предназначена для быстрого доступа к страницам административной панели. Начиная с версии 3.3 её немного переименовали в "Панель инструментов" (Toolbar), при этом внешний вид и код не изменились, но подход к использованию стал более сосредоточенным на фронтенде сайта.
В этой статье собраны различные методы изменения этой панели: добавление, модификация, удаление элементов и т.д.
Что такое WP_Admin_Bar
Для работы с панелью инструментов в WordPress существует отдельный класс WP_Admin_Bar
и ряд функций, описывающих работу всей панели. Если в статье вы не найдете нужную информацию, попробуйте разобраться непосредственно в коде в файлах wp-includes/admin-bar.php
.
Чтобы вставить код, можно использовать плагин: Code Snippets.
Содержание
- Удобное скрытие панели
- Удаление основных элементов (ссылок) из панели
- Удаление любых элементов (ссылок) из панели
- Удаление/Отключение панели
- Добавление э��ементов (ссылок) в панель
- Иконка (dashicon) для административной панели
- Как найти $id существующего элемента панели
- Удаление только верхнего отступа у панели
- Добавление пользовательского меню в панель
- Ссылка для удаления записи в панели
- Всегда показывать панель
- Замена "Привет" на "Здравствуйте" в панели
- Multisite: перенос меню подсайтов в главное меню административной панели
- Плагины для административной панели (панели инструментов)
УДОБНОЕ СКРЫТИЕ ПАНЕЛИ
Я не люблю, когда административная панель расположена сверху на фронтенде. Часто она не сочетается с дизайном, но это можно терпеть. Однако, когда она мешает прокрутке или дополнительным плавающим панелям, необходимо что-то с этим делать.
На мой взгляд, самым универсальным решением будет сделать эту панель сворачиваемой. Так она не будет мешать, когда не нужна.
Я искал плагины для этого, но большую часть находок сложно использовать, поэтому мне пришлось написать свой код. Мне нравится то, что я придумал; в некоторых случаях это очень удобно, так как панель не мешает и может вместить больше элементов. Суть в том, что панель появляется при наведении на иконку в верхнем левом углу и отображается вертикально, а не горизонтально.
Вот как это выглядит на теме Twenty Twenty-One:
Код для сворачивания панели
<?php
/**
- Свернуть административную панель (Toolbar) в левый верхний угол.
-
@version 1.0
*/
final class Kama_Collapse_Toolbar {public static function init(){
add_action( 'admin_bar_init', [ CLASS, 'hooks' ] );
}public static function hooks(){
// Удаляем отступ
remove_action( 'wp_head', '_admin_bar_bump_cb' );
add_action( 'wp_head', [ CLASS, 'collapse_styles' ] );
}public static function collapse_styles(){
// Обратите внимание: ничего не делаем для админ-панели.
if( is_admin() ){
return;
}ob_start(); ?>
}
}
Kama_Collapse_Toolbar::init();
Теперь нужн�� скопировать этот код в файл, подключить его в functions.php
и активировать класс.
УДАЛЕНИЕ ОСНОВНЫХ ЭЛЕМЕНТОВ (ССЫЛОК) ИЗ ПАНЕЛИ
Часто в интернете можно встретить решение, которое не совсем хорошее, так как элементы удаляются после их добавления на панель. Предпочтительнее избежать их добавления вовсе.
Код для удаления элементов из панели
<?php
add_action( 'add_admin_bar_menus', 'kama_remove_default_wp_menu_items', 0 );
function kama_remove_default_wp_menu_items() {
$remove_wp_menus_items = [
'wp_admin_bar_wp_menu',
'wp_admin_bar_customize_menu',
'wp_admin_bar_comments_menu',
'wp_admin_bar_add_secondary_groups',
];
foreach( $remove_wp_menus_items as $callback ){
$priority = has_action( 'admin_bar_menu', $callback );
if( $priority !== false ){
remove_action( 'admin_bar_menu', $callback, $priority );
}
}
}
УДАЛЕНИЕ ЛЮБЫХ ЭЛЕМЕНТОВ (ССЫЛОК) ИЗ ПАНЕЛИ
Для удаления любых элементов, добавленных плагинами, используйте методы remove_menu()
или remove_node()
. Они идентичны.
Пример удаления элемента
<?php
add_action( 'wp_before_admin_bar_render', 'delete_item_from_toolbar', 99 );
function delete_item_from_toolbar() {
global $wp_admin_bar;
$wp_admin_bar->remove_menu('mymenu');
}
УДАЛЕНИЕ/ОТКЛЮЧЕНИЕ ПАНЕЛИ
Чтобы отключить панель в профиле и административной панели, перейдите в Пользователи > Профиль.
Если нужно отключить её глобально, используйте функцию show_admin_bar()
.
Примеры отключения
Мягкое отключение
Чтобы отключить "Панель инструментов" на фронтенде сайта и позволить плагинам включать её:
<?php
show_admin_bar( false );
Полное отключение
Чтобы отключить панель как на фронтенде, так и в админ-панели:
<?php
// Отключение панели на фронтенде
add_filter( 'show_admin_bar', '__return_false' );
// Отключение панели в админ-панели
remove_action( 'in_admin_header', 'wp_admin_bar_render', 0 );
Отключение панели для всех, кроме администраторов
<?php
add_filter( 'show_admin_bar', 'admin_bar_for_admin_only', 99 );
function admin_bar_for_admin_only( $show_admin_bar ) {
if ( $show_admin_bar && ! current_user_can( 'manage_options' ) ) {
$show_admin_bar = false;
}
return $show_admin_bar;
}
ДОБАВЛЕНИЕ ЭЛЕМЕНТОВ (ССЫЛОК) В ПАНЕЛЬ
Чтобы добавить ссылки, используйте метод WP_Admin_Bar::add_menu()
, известный также как WP_Admin_Bar::add_node()
. Добавление должно происходить в хуке admin_bar_menu
.
Пример добавления ссылки
<?php
add_action( 'admin_bar_menu', 'my_admin_bar_menu', 30 );
function my_admin_bar_menu( $wp_admin_bar ) {
$wp_admin_bar->add_menu( array(
'id' => 'menu_id',
'title' => 'Внешняя ссылка',
'href' => 'http://example.com',
) );
// дочерняя ссылка
$wp_admin_bar->add_menu( array(
'parent' => 'menu_id',
'id' => 'some_id',
'title' => 'Дочерняя ссылка',
'href' => 'http://example.com/subpage',
) );
}
Определение позиции ссылки
Чтобы изменить позицию блока ссылок, меняйте число 30
— чем больше число, тем ближе к концу.
ИКОНКИ (DASHICON) ДЛЯ АДМИНИСТРАТИВНОЙ ПАНЕЛИ
Чтобы добавить иконки к вашим элементам, используйте класс ab-icon
в HTML.
Пример с иконкой
<?php
add_action( 'admin_bar_menu', 'add_toolbar_link', 70 );
function add_toolbar_link( $wp_admin_bar ) {
$wp_admin_bar->add_menu( [
'id' => 'chartlink',
'title' => 'Просмотры',
'href' => '#',
] );
}
КАК НАЙТИ $ID СУЩЕСТВУЮЩЕГО ЭЛЕМЕНТА ПАНЕЛИ
Чтобы найти $id
существующего элемента панели, посмотрите его в исходном коде: он добавляется как суффикс в атрибут id
тега LI
.
УДАЛЕНИЕ ТОЛЬКО ВЕРХНЕГО ОТСТУПА У ПАНЕЛИ
WordPress добавляет 28px отступ к тегам HTML и BODY. Если нужно убрать этот отступ, используйте следующий код:
<?php
add_action( 'admin_bar_init', function(){
remove_action( 'wp_head', '_admin_bar_bump_cb' );
} );
ДОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЬСКОГО МЕНЮ В ПАНЕЛЬ
Эта функция может оказаться незаменимой, так как, помимо удобства, она добавляет функциональность.
Код для добавления навигационного меню
<?php
add_action( 'after_setup_theme', function() {
register_nav_menu( 'toolbar', 'Toolbar' );
} );
add_action( 'admin_bar_menu', 'kama_add_toolbar_menu', 999 );
function kama_add_toolbar_menu( $toolbar ) {
$locations = get_nav_menu_locations();
if ( ! isset( $locations['toolbar'] ) ) {
return;
}
$items = wp_get_nav_menu_items( $locations['toolbar']);
if ( ! $items ) {
return;
}
foreach( $items as $item ) {
$args = [
'parent' => $item->menu_item_parent ? 'id_' . $item->menu_item_parent : false,
'id' => 'id_' . $item->ID,
'title' => $item->title,
'href' => $item->url,
'meta' => [
'class' => implode( ' ', $item->classes ),
'title' => esc_attr( $item->description ),
'target' => $item->target,
],
];
$toolbar->add_node( $args );
}
}
Теперь вам нужно добавить этот код в functions.php
, создать меню в админ-панели: Внешний вид > Меню и прикрепить меню к области "Toolbar".
ССЫЛКА ДЛЯ УДАЛЕНИЯ ЗАПИСИ В ПАНЕЛИ
Ссылка на редактирование записи всегда есть в панели. Но если записи часто удаляются, было бы удобно иметь ссылку на удаление.
Код ссылки для удаления записи
<?php
add_action( 'admin_bar_menu', 'kama_delete_toolbar_link', 90 );
function kama_delete_toolbar_link() {
global $wp_admin_bar;
if ( ! is_super_admin() || ! is_admin_bar_showing() ){
return;
}
$obj = get_queried_object();
if ( ! $obj || ! isset( $obj->post_type ) ){
return;
}
$dellink = get_delete_post_link( $obj->ID );
if( $dellink ){
$wp_admin_bar->add_menu( array(
'id' => 'delete',
'title' => EMPTY_TRASH_DAYS ? 'Переместить в корзину' : 'Удалить запись',
'href' => $dellink,
) );
}
}
ВСЕГДА ПОКАЗЫВАТЬ ПАНЕЛЬ
Этот случай редок, но иногда может понадобиться. Этот код всегда будет показывать панель, даже если пользователь не авторизован. В этом случае будет отображаться только ссылка "Вход".
Код для постоянного отображения панели
<?php
add_filter( 'show_admin_bar', '__return_true', 1000 );
add_action( 'admin_bar_menu', 'pjw_login_adminbar', 0 );
function pjw_login_adminbar( $wp_admin_bar) {
if ( is_user_logged_in() ){
return;
}
$wp_admin_bar->add_menu( [
'title' => 'Вход',
'href' => wp_login_url()
] );
remove_action( 'admin_bar_menu', 'wp_admin_bar_wp_menu', 10 );
}
ЗАМЕНА "ПРИВЕТ" НА "ЗДРАВСТВУЙТЕ" В ПАНЕЛИ
Информальное слово "Привет", отображаемое в административной панели, может не подойти для всех сайтов. Иногда нужно заменить его.
Код для замены
<?php
add_action( 'admin_bar_menu', 'replace_wordpress_howdy', 25 );
function replace_wordpress_howdy( $wp_admin_bar ) {
$my_account = $wp_admin_bar->get_node( 'my-account' );
if ( isset( $my_account->title ) ) {
$newtext = str_replace( 'Hello,', 'Здравствуйте,', $my_account->title ?? '' );
$wp_admin_bar->add_node( [
'id' => 'my-account',
'title' => $newtext,
] );
}
}
MULTISITE: ПЕРЕНОС МЕНЮ ПОДСАЙТОВ В ГЛАВНОЕ МЕНЮ АДМИНИСТРАТИВНОЙ ПАНЕЛИ
Если у вас многосайтовая установка с несколькими подсайтами, гораздо удобнее переместить все подсайты в основное меню панелей.
Код для переноса меню
<?php
class Multisite_Admin_Bar {
public static function init(): void {
add_action( 'admin_bar_menu', [ __CLASS__, 'customize_toolbar' ], 31 );
add_action( 'wp_head', [ __CLASS__, 'styles' ] );
add_action( 'admin_head', [ __CLASS__, 'styles' ] );
add_action( 'admin_bar_menu', [ __CLASS__, 'add_switch_node' ], 30 );
}
public static function styles(): void {
?>
get_node( 'site-name' ) ){
return;
}
remove_action( 'admin_bar_menu', [ llocMslsMslsPlugin::class, 'update_adminbar' ], 999 );
$callback = function(){
$nodes = &$this->nodes;
unset(
$nodes['site-name'],
$nodes['my-sites-super-admin'],
$nodes['my-sites'],
$nodes['my-sites-list']
);
$net_admin = &$nodes['network-admin'];
$net_admin->parent = '';
};
$callback = $callback->bindTo( $toolbar, WP_Admin_Bar::class );
$callback->call( $toolbar );
}
public static function add_switch_node( WP_Admin_Bar $toolbar ): void {
$url = $_SERVER['REQUEST_URI'];
$url = str_starts_with( $url, '/ru' ) ? preg_replace( '~^/ru~', '', $url ) : "/ru$url";
$toolbar->add_menu( [
'id' => 'switch_langs',
'title' => '',
'href' => $url,
'meta' => [
'title' => 'Переключить текущую страницу на противоположный язык',
],
] );
}
}
ПЛАГИНЫ ДЛЯ АДМИНИСТРАТИВНОЙ ПАНЕЛИ (ПАНЕЛИ ИНСТРУМЕНТОВ)
- Clicky by Yoast — интеграция сервиса веб-аналитики в административную панель.
- What The File — прекрасный плагин для изучения иерархии шаблонов, показывает какой файл шаблона отвечает за отображение текущей страницы.
- Admin Bar Disabler — позволяет удалять панель для указанных ролей или возможностей.
- Другие плагины для панели инструментов можете найти по запросу в репозитории WordPress.
Теперь у вас есть полное руководство по работе с панелью инструментов в WordPress. Вы научились изменять её функциональность, добавлять или удалять элементы и адаптировать панель под свои нужды.