Удобное скрытие панели инструментов (тулбара, админ-бара) в WordPress

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

На мой взгляд самое универсальное решение — сделать эту панель скрывающейся (сворачивающейся). Так она не будет мешать и когда нужно под рукой.

По этому вопросу я искал плагины, но нашел каких-то монстров. Поэтому пришлось написать свой код. То что получилось мне нравится, в некоторых случаях это очень удобно: кроме того что панель не мешает, она еще и способна вместить больше элементов. Суть заключается в том, что панель появляется при наведении на иконку в верхнем левом углу и появляется она в вертикальном виде, а не горизонтальном. Получается своего рода сворачивание админ бара.

Вот так это выглядит на теме Twenty Twenty-One:

Код, который делает такие преобразования:

<?php

/**
 * Сollapse ADMIN-BAR (Toolbar) into left-top corner.
 *
 * @version 1.0
 */
final class Kama_Collapse_Toolbar {

	public static function init(){
		add_action( 'admin_bar_init', [ __CLASS__, 'hooks' ] );
	}

	public static function hooks(){

		// remove html margin bumps
		remove_action( 'wp_head', '_admin_bar_bump_cb' );

		add_action( 'wp_head', [ __CLASS__, 'collapse_styles' ] );
	}

	public static function collapse_styles(){

		// 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:#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 almin 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

final class Jackky_Collapse_Admin_Bar
{
	public static function init()
	{
		add_action( 'admin_bar_init', [ __CLASS__, 'hooks' ] );
	}

	public static function hooks()
	{
		// remove html margin bumps
		remove_action( 'wp_head', '_admin_bar_bump_cb' );

		add_action( 'wp_enqueue_scripts', [ __CLASS__, 'collapse_styles' ] );
		add_action( 'admin_bar_menu', [ __CLASS__, 'remove_nodes' ], 999 );
	}

	public static function collapse_styles()
	{
		$styles = "
			#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% );
				}
			}
		";

		wp_register_style( 'collapse-admin-bar', false );
		wp_add_inline_style( 'collapse-admin-bar', $styles );
		wp_enqueue_style( 'collapse-admin-bar' );
	}

	public static function remove_nodes( $wp_admin_bar )
	{
		$wp_admin_bar->remove_node( 'wp-logo' );
		$wp_admin_bar->remove_node( 'search' );
	}
}

add_action( 'init', [ Jackky_Collapse_Admin_Bar::class, 'init' ] );

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

Для работы кода, нужно чтобы в footer.php темы вызывалась функция wp_footer().