[WP]管理画面へメニューとサブメニューの追加

投稿者 admin on June 13, 2014

WPの管理画面にメニューを追加するのは簡単だ。

ただし、若干パラメータが多く、ネット上の情報も旧バージョンの記述もあり、混乱を感じたのでまとめる。

基本的にはこの記事によくまとめられている。

既存のメニュー(設定・外観・ユーザーなど)に追加する場合は問題はない。

自分の作ったメニューに、自分の作ったサブメニューを追加したいという場合は

function add_menu_items(){
    add_menu_page(
        'メニュー',//ページタイトル
        'メニュー',//メニュータイトル
        'activate_plugins',//権限
        'menu',//スラグ
        'menu_render'//実行する関数
        );
    add_submenu_page(
        'menu',//親のスラグ
        '新規メニュー',//ページタイトル
        '新規メニュー',//メニュータイトル
        'activate_plugins',//権限
        'new-menu',//スラグ
        'new_menu_render'//実行する関数
        );

}
add_action('admin_menu', 'add_menu_items');

これでOK。

  ハマったのは、古い情報だと「スラグ」の代わりに「このメニューを定義しているphpファイル」を指定し、具体的には__FILE__などと入っているものがあったのだが、これだとサブメニューは現れなかった。

 それ以前に、ここでphpファイル名を直接指定するのは泥臭いようにも感じるので、なるべく「メニュースラグ」を使いたい。何しろ同じファイルの中で複数の親メニューを設定する場合はどうなるんだ、という話になる。

 また、add_menu_page()に対して、2回add_submenu_page()を実行している例も見受けられたが、その必要も無いようだ。ちゃんとadd_menu_page()で生成したメニューもサブメニューとして現れ、仲良く2つのサブメニューが並ぶ結果となった。

 これらの関数を弄んでいるうちに「このページを閲覧する権限がありません」というエラーが時々出て来るのが気になった。リロードしたり、一旦他のページを表示させたりすると直るのだが、何となく不穏な動きをするところ、若干不安を感じる。

※Codexでは、このような場合「フックする位置が早すぎ」みたいなことが書かれていたが、ちゃんとadmin_menuにフックしているので問題はないはず。