私は3つのsubmenu_pagesを持つプラグインを持っています。一つのページには(一つのテキストには一つのアイテムのリストに)定型文があります。フォームを送信すると、何らかの処理が行われます。その後、私はform-pageに戻りたくはありませんが、WP Shellは私を他のsubmenu_pagesの1つ(この場合はリスト)にリダイレクトします。
これを達成するにはどうすればよいですか。
add_menu_page( 'page1 main page', '0', 'manage_options', 'mg-pi', 'mg_backend');
add_submenu_page( 'mg-pi', 'list smthing', '0', 'manage_options', 'mg-pi-sub-list', 'mg_list');
add_submenu_page( 'mg-pi', 'create', '0', 'manage_options', 'mg-pi-sub-create', 'mg_new_item');
そのため、mg_new_item()
では処理が行われ、シェルはmg_list()
にリダイレクトされます。しかし、私がmg_list()
をphpで呼び出すと、URLはmg_new_item()
のままです。
私はheader("Location: the-hardcoded-list-url");
を実行できることを知っていますが、私はそれをするためのWordPressの一般的な方法を、一般的なURL生成と共に探しています。
もう少し研究を重ねた結果、私は実際に探していたものが好きになりました。回避策ではなく、ワードプレス互換の方法です。
定義されたスラッグを期待する:menu_page_url
という関数があります。そしてwp_redirect
があります
だから我々は呼び出すために2つのワードプレス機能を持っています。この場合:
$foo = menu_page_url("mg-pi-sub-list");
wp_redirect($foo);
それでおしまい。そして良いことに、私はすべてのWordpressのルールを守っていますし、プラグインは将来のバージョンで互換性があるでしょう。
http://codex.wordpress.org/Function_Reference/wp_redirecthttp://codex.wordpress.org/ Function_Reference/menu_page_url
更新
そしてあなたがあなたのヘッダに問題があるなら、あなたはこのパラメータであなたを手助けすることができます:
<form action="?page=your-sub_page-slug&noheaders=true">
単にadd_query_arg()
、remove_query_arg()
、get_query_var()
を使ってください。
あなたのページリンクでは、あなたはstep=one
のような単純な問い合わせvarを使います。
$query_arg = add_query_arg( 'step', 'one', $_SERVER['REQUEST_URI'] );
その後、ユーザーがフォームを処理したら、ページをリロードするだけです。それから単にチェックしてください
0 !== get_query_var( 'step' )
AND 'one' !== get_query_var( 'step' )
さらに処理します。戻ってきたい場合は、remove_query_arg()
などを使用してください。