InstantWPはローカル環境でWordPressの開発をするときに便利なのですが、思わぬところに落とし穴があったので紹介しておきます。
InstantWPのデフォルト状態が本番サーバーの環境とはやや違っていたことが原因でした。
具体的にはこんな症状でした
管理者でログインすると、ページを表示したときに一番上に管理バー(アドミンバー)が表示されるはずなのですが、
気づいたら表示されなくなっていました。
InstantWordPress内のローカル環境のことです。
InstantWPのバージョンは 4.5 、表示しているテーマは「Twenty Sixteen」のデフォルト(ノンカスタム)です。
これ以外に自作テーマ・バズ部さんの「Xeory」なども試しましたが、どれを使っても管理バーは表示されませんでした。
まずは基本の確認
ということで、試したことを羅列してみます。
wp_head(),wp_footer()はありますか?
もともとは自作テーマを作っているときに発見したバグだったので、index.php内にwp_head()とwp_footer()が記載されているかを確認しました。
<html> <head> ・・・ <?php wp_head(); ?> </head> <body> ・・・ <?php wp_footer(); ?> </body> </html>
という構造になっていたので、これは問題なしでした。
そもそも、WordPressの公式テーマでも表示されていない状態です。
自作テーマ特有の症状とは考えにくいですね。
ログインユーザーの設定はされていますか?
WordPressにログインした状態でページを表示したときに、管理バーを表示するかどうかの設定をすることができます。
念のためここも確認してみました。
管理画面から「ユーザー」→「あなたのプロフィール」をクリックして、
「サイトを見るときにツールバーを表示する」にチェックが入っているかを確認します。
チェックが入っているのでここも問題ありませんでした。
デフォルトではチェックが入っていると思うので、普通は原因とは考えにくいですね。
ログアウト→再ログインしてみる
ログイン状態が正常に認識されていないかも!
と思い試してみましたが、治りませんでした。
ただ、これをするとあっさり治ってしまったという人は多いようです。
普通なら試す価値有りですね。
ブラウザのキャッシュ・クッキーを消去してみる
ブラウザ上の何かしらの問題でWordPressが正常に表示されていないのでは?
という疑いを晴らすために、これも試してみましたが治りません。
色々なサイトのログイン状態が解除されてしまったので、次回のログインが面倒だなという感じです。。。
表示されなくなる前はどんな状態だったのか?
基本はすべて試しましたが結果的に解決することはできませんでした。
次に取る手段としては、表示ができなくなった環境とできていた環境の違いを探していくことです。
今思えば、最初からこれを考えるべきでした。
実は表示されなくなる前に、本番環境を想定してプラグインを幾つかインストールしていました。
それが原因では?と思い、プラグインを1つずつ無効にして表示を確認してみた次第です。
管理バーの表示不具合はプラグインのせいだった
1つずつ有効・無効を切り替えて表示したところ、「WP Native Dashboard」というプラグインを無効にしたときに表示が回復しました。
実はこのプラグインは、自分で入れたプラグインではなくInstantWordPressに標準インストールされているプラグインです。
多国籍で利用されることを前提に、InstantWPの製作者が最初からインストールし、有効化しているものでした。
これを無効化すると、左上に表示されていた「日本語(ja)」という表示がなくなり、
管理バーが復活しました。
WordPressは日本語対応してくれているので、本番環境でこのプラグインを利用することはありません。
よってInstantWPでも無効化してしまえばOKという結論になりました。
実はこんなことも試していました
そもそも、管理バーを出力するスクリプトは動作しているのか?
と疑問におもって調べているうちに、それを調べる方法が見つかったので確かめてみました。
詳細はフォーラムに記載があったのでリンクを掲載しておきます。
WordPress > フォーラム >> サイトを見るときアドミンバーが表示されない不具合20160731追記:上記リンクはエラーになってしまいました。フォーラムから削除されたものと思われます。
具体的にはfunctions.phpに以下のスクリプトを記載し、
<?php add_filter( 'show_admin_bar', 'my_adminbar_setting_check' ); function my_adminbar_setting_check( $adminbar ) { var_dump( $adminbar ); return $adminbar; } var_dump( is_admin_bar_showing() ); ?>
ページの上部に「bool(true) bool(true) bool(true)」との表示があるか確認します。
表示が「bool(false)」になっていれば、管理バーの出力がされていないということだそうです。
私の場合は出力がされているようだったので、深追いはしませんでした。
あとがき
WordPressはオープンソースなので、本当に多種多様な人が開発をしてくださっています。
そのため、意図したわけでもなく相性の悪いスクリプトが存在したり、ということも多いわけです。
このことを念頭に置いて、バグが発生した前後の状態を思い出して1つずつ元に戻していくことが一番の解決策になります。
今回は「プラグインの競合」という結果でしたが、別のバグでも同じように解決することができるはずです。
開発系のプロセスは複雑ですが根気よく行きましょう。
ではまた。