Удобное скрытие панели инструментов (тулбара, админ-бара) в WordPress
Дефолтная панель (админ-бар, тулбар) расположен по умолчанию неудобно во фронт-энде. Панель часто не гармонирует с дизайном и мешает при всяких прокрутках или дополнительных плавающих панелях, зафиксированном хедере.
На мой взгляд самое универсальное решение — скрыть/свернуть/спрятать эту панель где-то в углу и показывать при наведенеии на иконку. Так она не будет мешать и при этом всегда останется под рукой.
По этому вопросу я искал плагины, но нашел каких-то монстров. Поэтому пришлось написать свой код. То что получилось мне нравится, в некоторых случаях это очень удобно: кроме того что панель не мешает, она еще и способна вместить больше элементов. Суть заключается в том, что панель появляется при наведении на иконку в верхнем левом углу и появляется она в вертикальном виде, а не горизонтальном. Получается своего рода сворачивание админ бара (скрывающееся топ меню).
Вот так это выглядит на теме Twenty Twenty-One:
Код, который делает такие преобразования:
<?php // phpcs:disable
/**
* Collapse ADMIN-BAR (Toolbar) into left-top corner.
*
* @version 1.0.1
*/
final class Kama_Collapse_Toolbar {
public static function init(): void {
add_action( 'admin_bar_init', [ __CLASS__, 'hooks' ] );
}
public static function hooks(): void {
// remove HTML margin bumps
remove_action( 'wp_head', '_admin_bar_bump_cb' );
add_action( 'wp_head', [ __CLASS__, 'collapse_styles' ] );
}
public static function collapse_styles(): void {
// do nothing for admin-panel.
// Remove this if you want to collapse admin-bar in admin-panel too.
if( is_admin() ){
return;
}
ob_start();
?>
<style id="kama_collapse_admin_bar">
#wpadminbar{ background:none; float:left; width:auto; height:auto; bottom:0; min-width:0 !important; }
#wpadminbar > *{ float:left !important; clear:both !important; }
#wpadminbar .ab-top-menu li{ float:none !important; }
#wpadminbar .ab-top-secondary{ float: none !important; }
#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{ top:0; left:100%; white-space:nowrap; }
#wpadminbar .quicklinks>ul>li>a{ padding-right:17px; }
#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{ left:100%; right:auto; }
html{ margin-top:0!important; }
#wpadminbar{ overflow:hidden; width:33px; height:30px; }
#wpadminbar:hover{ overflow:visible; width:auto; height:auto; background:rgba(102,102,102,.7); }
/* the color of the main icon */
#wp-admin-bar-<?= is_multisite() ? 'my-sites' : 'site-name' ?> .ab-item:before{ color:var(--color-accent, #797c7d); }
/* hide wp-logo */
#wp-admin-bar-wp-logo{ display:none; }
/* #wp-admin-bar-search{ display:none; } */
/* edit for twentysixteen */
body.admin-bar:before{ display:none; }
/* for admin panel --- */
@media screen and ( min-width: 782px ) {
html.wp-toolbar{ padding-top:0 !important; }
#wpadminbar:hover{ background:rgba(102,102,102,1); }
#adminmenu{ margin-top:48px !important; }
}
/* Gutenberg */
#wpwrap .edit-post-header{ top:0; }
#wpwrap .edit-post-sidebar{ top:56px; }
</style>
<?php
$styles = ob_get_clean();
echo preg_replace( '/[\n\t]/', '', $styles ) ."\n";
}
}
Теперь нужно скопировать этот код в файл, подключить этот файл в functions.php и запустить класс так:
Kama_Collapse_Toolbar::init();
Ещё один вариант:
Этот вариант оставляет меню коризонтальным, точно таким же как оно было до скрытия, ноп при этом скрывает его и меню не имеет своей высоты.
<?php // phpcs:disable
/**
* Vesrion: 1.1.1
*/
Collapse_Admin_Bar::init();
final class Collapse_Admin_Bar {
public static function init(): void {
add_action( 'admin_bar_init', [ __CLASS__, 'hooks' ] );
}
public static function hooks(): void {
// remove html margin bumps
remove_action( 'wp_head', '_admin_bar_bump_cb' );
add_action( 'wp_enqueue_scripts', [ __CLASS__, 'collapse_styles' ] );
}
public static function collapse_styles(): void {
$styles = <<<CSS
#wpadminbar {
transition: clip-path .3s ease 1s, background-color .2s ease 1s;
clip-path: polygon(0 0, 32px 0, 32px 100%, 0 100%);
}
#wpadminbar:not( :hover ) {
background-color: rgba(29, 35, 39, 0);
}
#wpadminbar:not( :hover ) .ab-item::before {
color: #1d2327;
transition-delay: 1s;
}
#wpadminbar .ab-item {
position: relative;
}
#wpadminbar #wp-admin-bar-site-name > .ab-item::after {
content: '';
position: absolute;
top: 7px;
left: 7px;
z-index: -1;
width: 20px;
height: 20px;
border-radius: 50%;
background-color: #fff;
opacity: .8;
transition: opacity .2s ease 1s;
}
#wpadminbar:hover #wp-admin-bar-site-name > .ab-item::after {
opacity: 0;
transition-delay: 0s;
}
#wpadminbar:not( :hover ) > * {
pointer-events: none;
}
#wpadminbar:hover {
transition-delay: 0s;
clip-path: polygon(0 0, 100% 0, 100% 100vh, 0 100vh);
}
@media screen and ( max-width: 782px ) {
#wpadminbar {
clip-path: polygon(0 0, 50px 0, 50px 100%, 0 100%);
}
}
CSS;
wp_register_style( 'collapse-admin-bar', false ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
wp_add_inline_style( 'collapse-admin-bar', $styles );
wp_enqueue_style( 'collapse-admin-bar' );
}
}
Вставлять этот код нужно в functions.php или оформите из него плагин, если часто меняете шаблоны.
Для работы кода, нужно чтобы в footer.php темы вызывалась функция wp_footer().
—



