11 Хитовостей для Административной Панели WordPress – Полное Руководство

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. Вы научились изменять её функциональность, добавлять или удалять элементы и адаптировать панель под свои нужды.

Leave a Reply

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