LoginSignup
0
0

More than 3 years have passed since last update.

WordPressのマルチサイトで管理メニューが画面から見切れる問題を解決する

Last updated at Posted at 2020-10-05

TL;DR

スクリーンショット_2020-10-05_21_44_08.png

WordPressのマルチサイト環境で、サイト数が一定以上(画面高さ)を超えると「参加サイト」のドロップダウンメニューが画面から見切れる(スクロールできない)問題をCSSとJSで対応するよ!

なぜ書いたのか

仕事で結構な数のマルチサイト環境を構築する際、この問題にブチ当たって頭を抱えたので。
「いやいやまさか…ご冗談をw」と思って調べたものの、wordpress.orgでも10年前からバグ扱いのまま塩漬けになっていて更に頭を抱えたので。

解決策

Sassのbreakpointやadmin_enqueue_scriptsのpath等はよしなに。

multisite_menu_patch.scss
// メニューバー高さ
$height_menubar: 32px;

// 背景色
$background-dark: #32373c;
$background-light: #464b50;

// breakpoint
$breakpoint_pc: 783px;

@media screen and (min-width: $breakpoint_pc) {

    #wp-admin-bar-my-sites {
        > .ab-sub-wrapper {
            overflow-y: auto;
            margin-top: $height_menubar;
            height: calc(100vh - #{$height_menubar});

            // スクロールバー非表示
            -ms-overflow-style: none;
            scrollbar-width: none;

            &::-webkit-scrollbar {
                display: none;
            }

            #wp-admin-bar-network-admin-default {
                position: fixed;
                background: $background-dark;
            }

            ul#wp-admin-bar-my-sites-list {
                background-color: $background-light;
                // 最下段のメニューが押下できないケースに備えpaddingを確保しておく
                padding-bottom: $height_menubar !important;

                li.menupop {
                    position: relative;

                    div.ab-sub-wrapper {
                        ul.ab-submenu {
                            position: fixed;
                            background-color: $background-light;
                        }
                    }
                }
            }

            // サイトネットワークが1サイトしか存在しない場合
            &.site_single {
                height: auto;
                ul#wp-admin-bar-my-sites-list {
                    padding-bottom: 6px !important;
                }
            }
        }
    }
}

multisite_menu_patch.js
jQuery(function ($) {
    const breakpoint_pc = 783;

    // サイトネットワークが1サイトしか存在しない場合
    let sites = $('#wp-admin-bar-my-sites-list li.menupop').length;
    if (sites === 1) {
        $('#wp-admin-bar-my-sites').children('.ab-sub-wrapper').addClass('site_single');
    }

    // 画面幅取得
    let is_pc;
    $(window).on('load resize', function () {
        let width = $(window).width();
        if (width >= breakpoint_pc) {
            is_pc = true;
        } else {
            is_pc = false;
        }
    });

    // サブメニュー展開時のpositionをセット
    $('#wp-admin-bar-my-sites-list > .menupop').on('hover', function () {
        let top = $(this).offset().top;
        let offsetTop = 6;
        let subMenu = $(this).find('.ab-submenu');
        if (is_pc === true) {
            subMenu.offset({'top': top - offsetTop});
        }
    })
});

functions.php
// multisite_menu_patch.css, multisite_menu_patch.jsを読み込み
function load_multisite_menu_patch() {
    $path_style = 'PATH/TO/multisite_menu_patch.css';
    $deps_style = array();
    wp_register_style( 'multisite_menu_patch_style', $path_style,  $depth_style, '1.0.0' );
    wp_enqueue_style( 'multisite_menu_patch_style' );

    $path_script = 'PATH/TO/multisite_menu_patch.js';
    $deps_script = array('jquery');
    wp_register_script( 'multisite_menu_patch_script', $path_script,  $deps_script, '1.0.0' );
    wp_enqueue_script( 'multisite_menu_patch_script' );
}
add_action( 'admin_enqueue_scripts', 'load_multisite_menu_patch' );

備考

WordPress.org - #15317 My Sites limited to 23 sites on Admin Bar

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0