Codexはもうお読みになっていると思いますので、要点だけで失礼します。
a.データ一覧ページには、
options-general.php?page=slug
というようなリンクが作ってあり、b.データ詳細編集ページは、
function show_b() {
if ($_GET['page'] == 'slug') {
database_access_codes...;
show_contents_codes...;
}
}
といった構成になっているとします。
この場合、bをリンクだけで表示させるのは、どうやら無理のようです。「どうやら」というのは、コードを全て読み切れてはいないので、そういう処理をしていると読めるが、断言はできない、と解釈してください。
ページ要求のときに、WordPressは、
- registerされたmenu情報からタイトルやcapabilityを得る
- capabilityが十分かどうかチェックして関数を実行する
という処理をしているようです。capabilityのチェックは当然で、これがないと、任意のコードが実行できてしまうというのはすぐわかると思います。
問題はこれをリンクからWordPressの関数に渡せるかどうか、ということになります。もし、これが可能ならば、capabilityのチェックは意味がなくなって、何でもありということになってしまいますから、「できない」と解釈するのがよいと思います。
さて、対策ですが、素直にmenuを登録するのがよいと思います。つまり、
add_menu_page(a.データ一覧ページを登録);
add_submenu_page(b.データ詳細編集ページを登録);
として、トップメニュー(推奨されていませんが)とサブメニューを登録し、a.データ一覧ページに、
admin.php?page=slug
と、リンクを張ると、リンクをクリックすれば該当のページに飛ぶことができます。メニューを出してしまえば、リンクの意味がないではないか、と言われそうですが、パラメータを渡せば、被リンク側関数で表示をコントロールすることもできるので、少しはマシということでご勘弁を。
ご回答ありがとうございます。
なるほど、それではメニュー項目にない画面への遷移はできないという認識で進めたいと思います。
今回の要件だと、以下の対応策が考えられますね。
1. 詳細編集ページもメニュー項目として表示しつつ、運用上では一覧画面からの遷移時に動作するようにする。
2. 一覧画面でのリンククリック時javascriptのポップアップウインドウで詳細編集ページを表示し疑似的に画面遷移をする。
3. 一覧データと編集フォームを同一画面に配置する
今回は3でいくのが一番作業コストが低くなると考えまして、3で行く事にします。
ありがとうございました。助かりました。
普通にパラメータを追加すればできませんか?
例えば下記のようにページを追加された場合、
add_action('admin_menu', 'my_plugin_menu');
function my_plugin_menu() {
add_options_page('My Options', 'My Plugin', 'manage_options', 'my-plugin.php', 'my_plugin_page');
}
一覧画面
options-general.php?page=my-plugin.php
idが1のデータのデータ詳細画面
options-general.php?page=my-plugin.php&id=1
idが1のデータのデータ編集画面
options-general.php?page=my-plugin.php&id=1&action=edit
要は$_GET[page]がadd_options_page関数の第4引数で指定した値であれば一つのメニュー項目でいくらでもページを追加できるかと思います。
onokazu様
ご回答ありがとうございます。
できました….。
GETパラメータによってテンプレートの読み込みを分岐させるという事ですよね。
ちょっとこれで進めてみたいと思います。
ありがとうございました!
すいません、GETと書きましたが、もちろんPOSTでもOKです。