web-dev-qa-db-ja.com

Wordpressのプラグインページが別のページではなく管理コンテンツコンテナに読み込まれる

私はそれ自身のUIを持つワードプレスプラグインを作成しています。これは標準的なWebアプリケーションのように見えるので、プラグイン内で行われるすべてのことはWP管理領域と統合するのではなく、このUIで処理されます。私の問題はそれを別のページとしてロードすることができないということです、私はそれをコンテンツブロックに埋め込まれたUIで管理領域で作成されたページにロードすることができるだけです。このようにメニューに追加すると:

// Add plugin UI submenu item
add_submenu_page(
    'myPlugin', 'myPlugin WP', __('myPlugin UI', 'myPlugin'),
    $capability, 'myPlugin-ui', 'myPlugin_router'
);

そしてそれにそのようにページにアクセスさせます:

    function myPlugin_router() {

        // Get current screen details
        $screen = get_current_screen();

    if(strpos($screen->base, 'myPlugin-ui') !== false) {
            include(DS_ROOT_PATH.'/views/myPlugin-ui.php');

    }
}

私はそれを追加するために "include"を使っているのでテンプレートとしてロードしているのでしょうか?

Wordpressの管理者が行うのと同じ方法でこのUIを使用し、UIのコンテンツ領域内に別々のページをロードすることも計画しています。これはWPが私のUIに対して行う方法とまったく同じです。それでそれはテンプレートを使います。これを行うには、上記のように単にincludeを使用しますか?

1
user1632018

私はこれは本当に悪い考えだと思うと言ってこれを前置きするつもりですが、物事が初期化された後であるが出力が起こる前に起こるアクションをフックすることによって管理UIを回避することができます:

function my_admin_ui(){
    if( isset( $_GET['page'] )
        && 'myPlugin-ui' == $_GET['page'] ){
            include( plugin_dir_path( __FILE__ ) . 'views/myPlugin-ui.php' );
            exit;
    }
}
add_action( 'admin_init', 'my_admin_ui', 999 );
2
Milo