web-dev-qa-db-fra.com

Création d'une page d'administrateur WordPress sans menu pour un plugin

J'écris un plugin, qui listera un certain nombre d'entrées à partir d'un ensemble de tables personnalisé. J'ai ajouté la page principale du plugin en utilisant les fonctions WordPress suivantes:

// 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 ***
    }
}

Maintenant, si vous lisez le code ci-dessus de près, vous remarquerez qu'il y a un commentaire qui dit 'I Need Need A Here' ; voici plus de détails:

Je sais comment tout afficher sur la page d'administration que j'ai créée. La page d'administration lira à partir des tableaux personnalisés et affichera les résultats sous forme de lignes de tableau HTML.

Je n'ai qu'à relier chaque ligne à une page, appelons-la 'Page de détails de l'entrée' . L'idée est que, pour chaque ligne du tableau HTML, il y aura un lien, et lorsque je clique sur ce lien, cela me conduit à une autre page qui affiche plus de détails sur cette ligne.

Je pensais à utiliser add_submenu_page comme décrit ici , mais honnêtement, je ne comprenais pas comment l'utiliser et comment l'inclure dans mon code. J'ai essayé quelque chose comme ça mais je pense que c'est faux:

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
}

Maintenant, les deux problèmes auxquels je suis confronté sont:

  1. Comment ajouter correctement la page de détails (il est clair que ce que je fais ci-dessus dans le deuxième extrait de code est incorrect)?
  2. Comment inclure des paramètres dans la page de détails (je dois passer un identifiant de ligne pour afficher les détails)?

Je pense que je suis vraiment sur le point de résoudre le problème, mais je ne pouvais pas trouver suffisamment de documentation pour le résoudre. Aidez-moi, et je vous remercie vraiment beaucoup.

À votre santé.

5
Greeso

Je suis moins convaincu que je sais ce que tu fais que je ne l'étais autrefois.

// 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)
}

Vous utilisez deux fonctions principales supplémentaires ici, donc pour référence:

10
s_ha_dum

Il est préférable d'ajouter un autre paramètre dans l'URL et de l'appeler "action". En fonction de cette action, restituez un modèle différent pour une action différente.

Avantage: le menu restera ouvert (actif). Dans la solution ci-dessus, le menu ne sera pas ouvert pour un menu caché car nous supprimons techniquement le parent d'un sous-menu.

0
Mayur Chauhan