web-dev-qa-db-ja.com

プラグイン用のメニューなしでWordPress管理ページを作成する

私はプラグインを書いています、それはテーブルのカスタムセットからエントリーの数をリストします。私は以下のWordPress機能を使用してプラグインのメインページを追加しました:

// Add menu and pages to WordPress admin area
add_action('admin_menu', 'myplugin_create_top_level_menu');

function myplugin_create_top_level_menu() {
    add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myplugin-top-level-admin-menu');
    add_submenu_page('myplugin-top-level-admin-menu', 'MyPlugin Admin Page', 'Admin Page', 'manage_options', 'myplugin-top-level-admin-menu', 'myplugin_admin_page');
}

function myplugin_admin_page {
    // Code to display the admin page for my plugin (both php and html code)
    // This includes the following seudo code (in php)
    foreach ($results_from_db as $result) {
        // CODE TO DISPLAY RESULTS IN AN HTML TABLE *** I NEED HELP HERE ***
    }
}

さて、あなたが上記のコードを詳しく読むと、 '助けが必要' ;というコメントがあることに気づくでしょう。詳細はこちら

自分が作成した管理ページにすべてを表示する方法を知っています。管理ページはカスタムテーブルから読み取り、結果をHTMLテーブル行として表示します。

各行をページにリンクするだけでよく、 'Entry Details Page' と呼びます。その考えは、HTMLテーブルの各行にリンクがあり、そのリンクをクリックすると、その行に関する詳細を表示する別のページに移動することです。

私は here のようにadd_submenu_pageを使うことを考えていましたが、正直にそれを使う方法や自分のコードに含める方法を理解していませんでした。私はこのようなことを試しましたが、私はそれが間違っていると思います:

function myplugin_admin_page {
    // Code to display the admin page for my plugin (both php and html code)
    // This includes the following seudo code (in php)
    foreach ($results_from_db as $result) {
        // CODE TO DISPLAY RESULTS IN AN HTML TABLE *** I NEED HELP HERE ***

        // The following line of code is incorrect, but to show you the idea
        echo '<a href="' . add_submenu_page(NULL,'Entry Details Page','Entry Details Page','manage_options','details-page', 'myplugin_details_page'); . '">View</a>';

    }
}

myplugin_details_page () {
    // Code to display the details page
}

今、私が直面している2つの問題は以下のとおりです。

  1. 詳細ページを正しく追加する方法(2番目のコードスニペットで上記で行っていることが正しくないことは明らかです)。
  2. 詳細ページにparamsを含めるにはどうすればいいですか(詳細を見るには行IDを渡す必要があります)?

私は本当に問題を解決することに近いと思います、しかし、私はそれを終えるのに十分なドキュメンテーションを見つけることができなかったので、助けてください、そして本当に本当にありがとう。

乾杯。

5
Greeso

私はあなたがしていることを私がかつてよりも知っていることを私はあまり確信していません。

// Add menu and pages to WordPress admin area
add_action('admin_menu', 'myplugin_create_top_level_menu');

function myplugin_create_top_level_menu() {

    // This is the menu on the side
    add_menu_page(
      'MyPlugin', 
      'MyPlugin', 
      'manage_options', 
      'myplugin-top-level-page'
    );

    // This is the first page that is displayed when the menu is clicked
    add_submenu_page(
      'myplugin-top-level-page', 
      'MyPlugin Top Level Page',
      'MyPlugin Top Level Page', 
      'manage_options', 
      'myplugin-top-level-page', 
      'myplugin_top_level_page_callback'
     );

     // This is the hidden page
     add_submenu_page(
      null, 
      'MyPlugin Details Page',
      'MyPlugin Details Page', 
      'manage_options', 
      'myplugin-details-page', 
      'myplugin_details_page_callback'
     );
}

function myplugin_top_level_page_callback() {

    global $wpdb;
    $results_from_db = $wpdb->get_results("SELECT * FROM myplugin_custom_table");

    foreach ($results_from_db as $result) {

        $id = $result->id;

        $link = add_query_arg(
            array(
                'page' => 'myplugin-details-page', // as defined in the hidden page
                'id' => $id
            ),
            admin_url('admin.php')
        );

        echo '<ul>';
        echo '<li><a href="'.$link.'">'.$id.'</a><li>';
        echo '</ul>';
    }
}

function myplugin_details_page_callback () {
    // This function is to display the hidden page (html and php)
}

ここでは2つの追加のコア関数を使用しています。

10
s_ha_dum

URLに別のパラメータを追加してそれを「アクション」と呼び、アクションに基づいて異なるアクションに対して異なるテンプレートをレンダリングすることをお勧めします。

利点:メニューを開いたままにします(アクティブ)。上記の解決策では、サブメニューの親を技術的に削除しているので、それは隠されたメニューのためにメニューを開いたままにしません。

0
Mayur Chauhan