サポート » プラグイン » [プラグイン開発]プラグイン管理画面中の画面遷移について。

  • 解決済 ubatama

    (@ubatama)


    php技術者です。

    この度初めてwpプラグインの開発を行うことになり、一点不明点が発生致しましたので質問させて頂きます。

    プラグインの画面構成を複数階層にしたいのですが、方法が分かりません。
    ——
    a.データ一覧ページ
    ↓(各データをクリックすると)
    b.データ詳細編集ページ
    ——

    という流れで、あるデータ群の管理を行いたいと考えております。
    データ永続化はプラグイン専用のテーブルを作成し格納します。

    bのページは、GETパラメータを受けてDBからデータを取得し、内容を変更する必要があるため、
    プラグインのメニュー領域には表示させる事が出来ません。

    現状ではadd_options_page関数などを使用して画面の権限設定を行おうと思っているのですが、一覧画面よりリンクを貼ってアクセスすると、

    「このページにアクセスするための十分なアクセス権がありません。」

    のエラーが表示されます。

    他のプラグインのページ構成を参考にするも、上記のような構成になっているものが見つけられず、そもそも可能なのかとも考えております。

    ページ遷移せずに、jsでサブウィンドウのような形で同一ページ内で複数画面を疑似的に出すことは可能だと思いますが、画面遷移が可能であればそちらを優先したいと考えております。

    こちらの方法についてお分かりになりましたら是非ご教示お願いいたします。

    よろしくお願いします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • kjmtsh

    (@kjmtsh)

    Codexはもうお読みになっていると思いますので、要点だけで失礼します。

    a.データ一覧ページには、

    options-general.php?page=slug

    というようなリンクが作ってあり、b.データ詳細編集ページは、

    function show_b() {
      if ($_GET['page'] == 'slug') {
        database_access_codes...;
        show_contents_codes...;
      }
    }

    といった構成になっているとします。

    この場合、bをリンクだけで表示させるのは、どうやら無理のようです。「どうやら」というのは、コードを全て読み切れてはいないので、そういう処理をしていると読めるが、断言はできない、と解釈してください。

    ページ要求のときに、WordPressは、

    1. registerされたmenu情報からタイトルやcapabilityを得る
    2. capabilityが十分かどうかチェックして関数を実行する

    という処理をしているようです。capabilityのチェックは当然で、これがないと、任意のコードが実行できてしまうというのはすぐわかると思います。

    問題はこれをリンクからWordPressの関数に渡せるかどうか、ということになります。もし、これが可能ならば、capabilityのチェックは意味がなくなって、何でもありということになってしまいますから、「できない」と解釈するのがよいと思います。

    さて、対策ですが、素直にmenuを登録するのがよいと思います。つまり、

    add_menu_page(a.データ一覧ページを登録);
    add_submenu_page(b.データ詳細編集ページを登録);

    として、トップメニュー(推奨されていませんが)とサブメニューを登録し、a.データ一覧ページに、

    admin.php?page=slug

    と、リンクを張ると、リンクをクリックすれば該当のページに飛ぶことができます。メニューを出してしまえば、リンクの意味がないではないか、と言われそうですが、パラメータを渡せば、被リンク側関数で表示をコントロールすることもできるので、少しはマシということでご勘弁を。

    トピック投稿者 ubatama

    (@ubatama)

    ご回答ありがとうございます。

    なるほど、それではメニュー項目にない画面への遷移はできないという認識で進めたいと思います。
    今回の要件だと、以下の対応策が考えられますね。

    1. 詳細編集ページもメニュー項目として表示しつつ、運用上では一覧画面からの遷移時に動作するようにする。

    2. 一覧画面でのリンククリック時javascriptのポップアップウインドウで詳細編集ページを表示し疑似的に画面遷移をする。

    3. 一覧データと編集フォームを同一画面に配置する

    今回は3でいくのが一番作業コストが低くなると考えまして、3で行く事にします。

    ありがとうございました。助かりました。

    onokazu

    (@onokazu)

    普通にパラメータを追加すればできませんか?

    例えば下記のようにページを追加された場合、

    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引数で指定した値であれば一つのメニュー項目でいくらでもページを追加できるかと思います。

    トピック投稿者 ubatama

    (@ubatama)

    onokazu様

    ご回答ありがとうございます。

    できました….。
    GETパラメータによってテンプレートの読み込みを分岐させるという事ですよね。

    ちょっとこれで進めてみたいと思います。

    ありがとうございました!

    onokazu

    (@onokazu)

    すいません、GETと書きましたが、もちろんPOSTでもOKです。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「[プラグイン開発]プラグイン管理画面中の画面遷移について。」には新たに返信することはできません。