2013-07-07

MP6 プラグインでメニューがカラム落ちするときの対処法

MP6 プラグインを使用し始めたのですが、管理バーにメニューを追加するタイプのプラグインを使用していると、端末の横幅によってはメニューが管理バーから落ちてしまい、管理バーから溢れたメニューが本文エリアに被ってしまいます。

メニューが追加されていない場合はこちら。

違いがちょっと分かりにくいですが、「キャッシュを削除」と「Debug」というメニューが管理バーから落ちてしまっています。

#wpadminbar{
    overflow: hidden;
}

として、溢れた要素を隠してしまってもいいですが、プロフィール画像のところが消えてしまったままです。

overflow: hidden; ではだめだったので、次に管理バーの高さを変更するパターンを考えましたが、height を数値で指定しないといけない箇所があったり、あまり現実的ではなかったので却下。
ということで、どうすればカラム落ちをさせず、表示を保つかという方向で。

なお、今回の記事の内容については、WordPress 3.5.2 に MP6 プラグインのバージョン 1.8 をインストールした場合についてです。
WordPress 本体や MP6 プラグインのバージョンアップ、別バージョン同士を組み合わた場合などには、以下の内容と対処法が異なることがあるかもしれません。

iPhone で見た時に不要なものを非表示にする

デフォルトの状態では問題ないので、不要なものを非表示にしていけばよいのでは、ということに。
出力自体を止めてしまうと、パソコンで見た時にも表示されなくなってしまうので、CSS でモバイルの場合に表示させないものを選択する。

僕の場合は、以下のものが不要と判断しました。

キャッシュの削除を iPhone からすることがないため不要と判断しました。
どうしてもキャッシュを削除したい場合には、WP Super Cache の設定ページにいきます。
他にローカル検証環境で Debug Bar を使用しているので、こちらも一応非表示になるようにしています。

管理画面用の CSS を以下ようにして読み込みます。
今回は、mp-6-mod.css というファイル名にしました。

function admin_css() {
    echo '<link rel="stylesheet" type="text/css" href="' . >get_bloginfo('template_directory') . '/mp6-mod.css">';
}
add_action('admin_head', 'admin_css');

2013年8月17日追記
管理画面外で CSS を読みこませる場合は以下のように読み込ませてください。

function mod_mp6_css() {
    if ( >is_admin_bar_showing() ){
        echo '<link rel="stylesheet" type="text/css" href="' . >get_bloginfo('template_directory') . '/mp6-mod.css">';
    }
}
add_action('wp_head', 'mod_mp6_css');

MP6 では max-width の 782px というブレークポイントが指定されているので、こちらに合わせています。
この横幅ではメニュー内容を消すほど狭くないという場合には、適宜サイズを変更しましょう。

今回は WP Super Cache の id を直接記述していますが、追加されるメニューが複数ある場合や、どんなものが入るか分からない場合には、#wp-admin-bar-root-default li:nth-child(n+5) と5番目以降の要素を非表示というようにしてもいいと思います。
ここらへんは各サイトで異なってくるところだと思うので、適宜調整しましょう。

パソコンなど横幅が充分にある場合でも WordPress ロゴは常に非表示でよいという場合には、functions.php に以下の記述をすればよいです。
そもそも出力されていないので、#wp-admin-bar-wp-logo は削除しなくてもいいですが不要なものなので、前述の CSS から #wp-admin-bar-wp-logo の指定を一応削除。

function hide_admin_bar_render() {
    global $wp_admin_bar;
    $wp_admin_bar->>remove_menu( 'wp-logo' );
}
add_action( 'wp_before_admin_bar_render', 'hide_admin_bar_render' );

なお、こちらの指定をしていて、かつ :nth-child(n+5) の指定をしている場合には、:nth-child(n+4) としなければ、追加されるメニューが非表示にならない ので、設定をしたあとにちゃんと確認しましょう。

もっとシンプル版

新規投稿ボタンもコメント確認ボタンも不要という場合には、よりシンプルにすることも可能です。

@media screen and ( max-width: 782px ) {
    #wp-admin-bar-root-default,
    #wp-admin-bar-debug-bar{
      display: none;
    }
    #wpadminbar #wp-admin-bar-my-account{
        margin-right: 0;
    }
}

WordPress から新規投稿ボタンなどが含まれている #wp-admin-bar-root-default を一括で非表示、一応 Debug bar も非表示に。
これだけだと、アバター画像が消えてしまうので、#wpadminbar #wp-admin-bar-my-account に指定されている margin-right: -156px;margin-right: 0; で上書き。

だいぶすっきりしますね。

最後に

基本的には CSS で表示をコントロールしているだけなので、システム的な不具合ができることは無いとは思いますが、本番環境に適用する前によくチェックしてから適用しましょう。