【wordpress】add_menu_pageの記述方法

Author:

以前からadd_menu_page関数の使い方を見ていると
何か違う書き方しているページが多かったりして混乱していたのだけど、
ようやく分かった。
2.9以前の書き方と3.0以降の書き方が違うのですね。

2.9のソース(wp-includes/plugin.php)を見るとこうなっている。

function add_menu_page( $page_title, $menu_title, $access_level, $file, $function = '', $icon_url = '', $position = NULL ) {

第4引数はファイル名。外部ファイルを読み込むように作られているっぽい。
第4引数のファイルを読み込み第5引数の関数を呼ぶのですかね。

んで、3.0のソースを見るとこうなっている。

function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = null ) {

第4引数はmenu_slag。サブメニュー作るときに使う変数名です。
requireやらincludeで読み込んだファイルから第5引数の関数が呼ばれます。

しかし、Codexを見るとこう書かれている。
「If the function parameter is omitted, the menu_slug should be the PHP file that handles the display of the menu page content.」
つまり、第5引数を省略した場合、第4引数はPHPファイル名にしろ、と。
分かりづらいよこれ!!

さらにひどいのが、第5引数を省略して第4引数だけにしたはずなのに動いてくれない。
うーむ、なんでだろう。

結果、wp-adminディレクトリから相対的に読まれているのでした。
wp-admin/test.phpとか置いたら動きやがる。
functions.phpに書いたからそこからの相対パスになると思ったら全然動かなかったのです。
海外のサイトとかでは第5引数設定してfile_get_contentsやらincludeなどで
読みなおせばいいとかなんとか。

なかなかくせのある関数なので気をつけましょうね。
プラグイン使ったほうが楽か。

Share on Facebook
Pocket