web-dev-qa-db-ja.com

add_submenu_pageは関数ではなくファイルをコールバックしますか?

私はすべてを追跡することができないので、私は自分のテーマのオプションを整理したいです。コールバックの代わりにpage_callbackをファイルにリンクさせるにはどうすればよいですか。

ファイルをコールバックに含めることができることはわかっていますが、単にここでファイルを呼び出すことができるのであれば、なぜでしょうか。

  add_submenu_page( 
              null            // -> Set to null - will hide menu link
            , 'Page Title'    // -> Page Title
            , 'Menu Title'    // -> Title that would otherwise appear in the menu
            , 'administrator' // -> Capability level
            , 'menu_handle'   // -> Still accessible via admin.php?page=menu_handle
            , 'page_callback' // -> To render the page
        );
2
Ben Racicot

Tracを実行して欠けている機能について文句を言う代わりに、私はOOP構文を利用することを提案します。

// File: base.class.php
abstract class wpse67649_admin_page_base
{
    public function add_page()
    {
        add_submenu_page( 
             null            // -> Set to null - will hide menu link
            ,'Page Title'    // -> Page Title
            ,'Menu Title'    // -> Title that would otherwise appear in the menu
            ,'administrator' // -> Capability level
            ,'menu_handle'   // -> Still accessible via admin.php?page=menu_handle
            ,array( $this, 'render_page' ) // -> To render the page
        );
    }

    // Must get defined in extending class
    abstract function render_page();
}

// File: ___sub_page.class.php
class wpse67649_render_sub_page extends wpse67649_admin_page_base
{
    public function __construct()
    {
        add_action( 'admin_init', array( $this, 'add_page' ) );
    }

    public function render_page()
    {
        // You have access to every $this->class_var from your parent class
        ?>
<div class="wrapper>
    <!-- do funky page rendering -->
</div>
        <?php
    }
}

これは最終的なことではありませんが、ものをよりよく整理するためにあなたをルートに連れて行くべきです。

2
kaiser

簡単に言えば - コールバックはファイルのロードを含めて何でもするのに十分だからです。 :)すでに可能なだけでなく、簡単なことでロジックを複雑にする価値はありません。

0
Rarst