WordPressで管理画面の特定のページかどうかを判断するPHPスクリプト
目次
この記事を書いた背景
WordPressでプラグインを作る際、管理画面のみだったり、特定の管理ページでしか使わないコードをすべてのページで読み込ませるのは無駄な実行時間を使ってしまうので、なんだか精神衛生上よろしくないですよね。
そこで、管理画面のチェックを行う方法についてメモしておきます。
利用するコード
今回の状況を回避するには3つの技術が必要でした。
管理画面かどうかのチェック
WordPressで管理画面かどうかをチェックするには、is_admin() 関数を利用します。
この関数は、ダッシュボードや管理画面の表示中であればtrueを返します。
現在表示しているページのチェック
現在表示しているページが何かをチェックするには、管理用グローバル変数である $pagenow を利用します。
例えば、「投稿」や「固定ページ」であれば「edit.php」を返します。
参考:グローバル変数
途中で実行を中断するコード
上記のチェックの結果、if() によってPHPスクリプト全体を囲うのもコード的には間違っていませんが、正直 if() の入れ子はダサいと思います。
WordPressでプラグインを読み込むコードは、wp-settings.php 内に次のように書かれています。
// Load active plugins.
foreach ( wp_get_active_and_valid_plugins() as $plugin ) {
wp_register_plugin_realpath( $plugin );
include_once( $plugin );
}
有効なプラグインのみを include_once() で取りこんでいるわけです。
ここで、PHPスクリプトの実行を中断するコードとして retrun を使います。
return はグローバルスコープで利用すると実行中のスクリプトが終了してしまいますが、include や require されている場合は呼び出し元に制御が戻りますので、先のプラグインの読み込みコードを考えればループに戻ってくれるわけですね。
参考:return
完成版のコード
上記の3つのコードを組み合わせて考えます。
例えば、管理画面の「投稿」や「固定ページ」のみで利用するコードをプラグインで実現するには、プラグインの先頭で次の条件分岐コードを記述します。
if ( !is_admin() || ($pagenow != 'edit.php') ) {
return;
}
管理画面かどうか、もしくは現在のページが edit.php かどうか、の順で評価させてます。
まとめ
どの程度実行パフォーマンスに影響があるかはわかりませんが、入れ子の気持ち悪さは解消されているので自分的に満足しています。
WordPressのコアファイルのコードを読むというのもまた面白いですね。
え?Webサイトのバックアップ、してないの!?
『ワードプレス外部バックアップサービス』
■3つの特長
・自分でやらなくて良い
・いざという時の復旧付き
・外部サーバーにバックアップ