CMS wordpress

【WordPress】プラグイン作成② ~管理画面にメニューを追加~

フックを使って管理画面にプラグインメニューを追加

前回、プラグインの入れ物を作成し、プラグインメニューに追加しました。

現在処理はなにも記述されていませんので、実施に機能を搭載していきたいと思います。

管理画面にメニューを追加する方法

まずは問題を作成するための管理画面にメニューを追加することから行います。

管理画面にメニューを追加するには「admin_menu」を使用します。引数については以下の表のとおりです。

add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
引数名 説明
$page_title メニュー選択した後に表示されるページの名前
$menu_title 管理画面上に表示される名称
$capability 表示するユーザの権限
$menu_slug 管理するスラッグ
$function 呼び出す関数名
$icon_url アイコンのURL
$postion メニュー位置

$capability、$menu_slugに関しては、以下の記事にまとめています。

実際の記述は以下のようにしました。ちなみに以下はfree-and-kind-program.php(プラグインファイル)に記述しています。

add_action('admin_menu','add_admin_menu');
function add_admin_menu() {
add_menu_page('問題管理ページ', '試験作成', 'administrator', "test",'test_menu');
}
function test_menu() {
echo "HelloWorld";
}

注意点としては、いきなり「add_menu_page」を記述してもエラーになります。

関数の中に記述してその関数をフックで呼び出す、と覚えましょう。

これで管理画面に「試験問題」メニューが作成され、メニューの内容は「test_menu」の記述したHelloWorldを出力、という内容を実現できています。

ただ、これでは拡張性、保守性の考慮がすっぱり抜け落ちています。

これから先データベースへの接続処理や管理画面にさらにページを加えるなどの機能拡張をしようとしたときに、何処になにが記述されているか分からず整理が大変です。

大変なだけならまだしも、せっかく機能追加したと思ったら、コードの可読性が低いと誤った場所に記述をしてしまい、最悪Wordpressが動かなくなる、という危険性もはらんでいます。

特にフックは競合する要素も含まれているっぽいので、ある程度開発方針を固めてから構築していくのが理想的だと考えます。

次回以降にMVCモデルでプラグインを実装していきたいと思います。

【おまけ】メニューにサブメニューを追加する方法

開発方針を作成しなければ、開発は進まないのも事実ですが、この技術はいずれにしても使用するので、ついでにサブメニューを追加する方法も記しておきます。

add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function);
メインメニューを作成するフックとほぼ同じですね。$parent_slugには管理画面のスラッグを設定しました。
コードは以下の記述としました。

add_action('admin_menu','add_admin_menu');
function add_admin_menu() {
add_menu_page('問題管理ページ', '試験作成', 'administrator', "test",'test_menu');
add_submenu_page("test",'問題管理ページ_サブ','試験作成_サブ','administrator',"test_sub",'test_menu_sub');
}
function test_menu() {
echo "HelloWorld";
}
function test_menu_sub() {
echo "HelloHelloWorld";
}

これで以下のようにサブメニューを追加することが出来ました。

まとめ

以上がサブメニューを追加する方法です。

後は引数次第でメニューの場所を変えたり、作成したメニューを非表示にすることなど、様々なカスタマイズが可能です。

次回から可読性、拡張性を考えながら実装していきたいと思います。

 

-CMS, wordpress

Copyright© Life.log , 2024 All Rights Reserved Powered by AFFINGER5.