管理画面にメニュー・サブメニューを追加したい

使用例

<?php
//使用例
$hogehoge = new HOGEHOGE();
class HOGEHOGE {
    public function __construct() { 
        add_action( 'admin_menu', array( &$this, 'admin_menu_page' ) ); 
    }
 
    public function admin_menu_page() 
    { 
        //管理画面メニュー追加
        add_menu_page( 
            'My Original Pluginメインページ', 
            'My Original Plugin', 
            'manage_options', 
            'wpmop', 
            array( &$this, 'wpmop_mainpage' ),
            '', 
            99 
        ); 
    
        //管理画面サブメニュー追加
        add_submenu_page( 
            'wpmop', 
            'My Original Pluginサブページ01', 
            'サブページ01', 
            'manage_options', 
            'wpmop-sub01', 
            array( $this, 'wpmop_subpage01' )
        );

    } 

    //管理画面メニューをクリックしたときに内容を出力する関数
    public function wpmop_mainpage()
    {
    //ここでの出力内容がそのまま表示されます。
?>
<div class="PluginPage">
    <h2 class="PluginPage__head">プラグインページタイトル</h2>
    <div class="PluginPage__body">プラグインページのコンテンツ</div>
<?php
    }
    //管理画面サブメニューをクリックしたときに内容を出力する関数
    public function wpmop_subpage01()
    {
    //ここでの出力内容がそのまま表示されます。
?>
<div class="PluginPage SubPage">
    <h2 class="PluginPage__head">プラグインサブページタイトル</h2>
    <div class="PluginPage__body">プラグインサブページのコンテンツ</div>
<?php
    }

}

解説

//利用するアクションは、admin_menu
add_action( 'admin_menu', array( &$this, 'hogehoge_method' ) );

//hogehoge_methodメソッド内で使用するメニュー追加関数
add_menu_page(
    'メニューを開いた時の<title>タグの文字',
    '管理画面左側メニューに表示させる文字',
    'メニュー利用可能な権限', 
    'メニューのスラッグ',
    'メニューページのコンテンツ表示に使われる関数名',
    'メニューアイコン画像URL',
    '管理画面左側での表示位置'
); 

//hogehoge_methodメソッド内で使用するサブメニュー追加関数
add_submenu_page(
    '親メニューのスラッグ',
    'サブメニューを開いた時の<title>タグの文字',
    '管理画面左側サブメニューに表示させる文字', 
    'サブメニュー利用可能な権限'
    'サブメニューのスラッグ',
    'サブメニューページのコンテンツ表示に使われる関数名'
); 

応用編

ob_start()関数の利用

引数で使われている関数内で出力されたものがそのままHTMLとして利用される関数がいくつかあります。

そのような関数の中で、普通にHTMLを書いているだけならば問題ないのですが、PHPで書いているときに「まだ出力したくない」のに、【勝手に出力しようとする関数】を使わなくてはいけない状況が出てくることがあります(例:the_content()のような関数)。

その場合、以下のようにob_start()関数を利用するとPHPのエラーが出ずに済みますので是非ご利用ください。

public function wpmop_subpage02() 
{
    ob_start();
    /*
    ここに勝手に出力されてしまう関数を含めたコードやHTMLを記載
    */
    $data = ob_get_contents(); // 記録結果を変数に代入
    ob_end_clean();
    echo $data;
}

Posted by webmaster