独自PHPにWordPressの管理バーを表示する方法

気づいたら6月は更新しないまま時間がすぎていきました。何か書きたいことがあったような気もするし、そんなに忙しかったわけでもなかった気がするんだけどなぁ……。他にやりたいことがありまして……。

今回は久しぶりにWordPressの話。WordPress以外で作ったページに、WordPressの管理バーを表示する方法について。そんな状況がはたしてどれだけあるんだとは言われそうですが、そういう業務があったので自分用にメモ。

まず調べたのが、WordPressで作ったページ以外にWordPressの機能を使う方法。これはすぐに分かりました。requireでWordPressのwp-blog-header.phpを読みこめばいいとのこと。例えば、WordPressのトップディレクトリにtestディレクトリを作成して、その中に独自のPHPを入れる場合は下記のようになる。

<?php
require('../wp-blog-header.php');
>

参考:WordPressを導入したがWPではないページ(.php)にWPタグや新着一覧を表示 | Ken’s WEB

次に管理バーを表示する方法を調べました。これも調べたら情報はあちこちにありました。どうやら、headタグ内に『<?php wp_head(); ?>』、bodyの閉じタグ直前に『<?php wp_footer(); ?>』を記述すればいいようです。
参考:WordPressの管理バーを表示させるためのおまじない二つ★ | oki2a24

これで表示できる! と思ったら表示されません。HTMLのコードを確認しても管理バーの記述がないので、CSSで非表示になっているわけでもないようです。ただし、body_class()で記述された中には、”admin-bar”とあります。is_admin_bar_showingという関数があるので試してみたところ、表示されてないのにtrueが返ってきました(参考:関数リファレンス/is admin bar showing – WordPress Codex 日本語版)。

ここからは根気です。管理バーを表示するコードを探して、どこから呼び出しているのかを探していきます。そうすると、『do_action( ‘admin_init’ );』を呼ぶ必要があるようだ、ということが分かりました。なぜ独自PHPではその箇所を通ってないのかまでは分からなかったのですが、コードに『do_action( ‘admin_init’ );』を追加してなんとか管理バーを表示することができました。。(2015/07/08修正)『do_action( ‘admin_init’ );』だと、余計な関数まで動いてしまうことが分かりました。実際に管理バーを表示するだけなら、『_wp_admin_bar_init();』を呼ぶだけでよさそうです。

以下、最低限のサンプルコード

<?php
require('../wp-blog-header.php');
status_header( 200 );
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>

<title></title>

<head>
    <?php wp_head(); ?>
</head>
<?php _wp_admin_bar_init(); ?>
<body <?php body_class(); ?>>
<br>
管理バー:
<?php
if( is_admin_bar_showing() ){
	echo "OK";
}else{
	echo "NG";
}
?>
<?php wp_footer(); ?>
</body>
</html>

ここで、『status_header( 200 );』を呼んでいる理由ですが、これがなかったらなぜかHTTPステータスが404となりました(一見、ちゃんと表示しているように見えるのですが、HTTPステータスを確認すると404でした)。どこが原因で404となっているのかは分からなかったのですが、とりあえずstatus_header関数を呼ぶことでHTTPステータスを200にすることができました。ただし、bodyタグにerror404というクラスが残ったままなので、根本的な解決にはなっていないかもしれません。

コメント

タイトルとURLをコピーしました