MENU

WordPressに自作のphpツールなどをログイン者限定で使わせたい時の置き方

編集者用のツールなどを作成した際に、一般ユーザーには使わせたくなくて管理者(編集者)だけに使わせたいみたいなことってあると思います。

そんなとき、作法としてはwp-adminにおけばよいみたいなんですが、ただそのまま置くだけだとwp-adminなのに誰でもアクセス可能みたいな感じになってしまいます。

なのでちょっとコードを追加したりしなくてはいけなくて、その辺の話をします。

目次

WordPressにログインしてる人限定のツールを置きたいとは?

記事を変換したりするツールだと、入力がHTMLそのままとかになることがありますね。

すると入力でHTMLタグをエスケープとかしづらくて、これを一般に見える位置に出すのはあぶねえなぁと思います。

じゃあどうすんべってところで、IPアドレスで絞るとかは王道ですが、それはそれで編集者全員にIP出せはちょっとめんどい。

となればログインしてるかどうかで権限を判定して、ログインしてない人は弾く!みたいな感じができると良さそう。

というところで、そのための処理がWordPressにはあります。

なのでそれを使おう!という話。をこれからやります。

「/../wp-load.php」で判定を行い、ダメならwp_dieでスレッドをキルする

以下のような処理を書くことで、wp-adminに置かれたwordpressファイルと同程度のセキュリティを発揮できます。

<?php
// WordPress の環境を読み込む(wp-admin 内なら、wp-load.php は1階層上にあります)
require_once( dirname(FILE) . '/../wp-load.php' );
if ( ! is_user_logged_in() ) {
wp_die( 'ログインしてください。' );
}

つまり、これを書いた状態なら、ログインしてないユーザーはファイルにアクセスできず、エラー画面が表示されます。(このwp-loadがログイン状態をみる感じのファイルなので、これをみて判定するとwprdpressのwp-adminの仲間に加われます。)

ちなみにこれを書かずに置いた場合は、「wp-admin/xxx.php」とかでもログインしてないユーザーがアクセス可能でした。むしろめっちゃセキュリティ下がってますね。

で、そのあとのwp_dieってやつは名前怖いんだけど、wordpressのエラーメッセージスタイルを出す感じのやつで、推奨される方法らしい。

これを使うと、確かによくみる感じのwordpressエラー画面が出た。(ログインしていない場合)

終わりに

この方法でwp-adminにおけば管理者用ツールがいけるっぽいですね。

汎用性が高そうなのでぜひ覚えておきたい。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次