it-swarm.com.de

Erstellen einer WordPress-Administrationsseite ohne Menü für ein Plugin

Ich schreibe ein Plugin, das eine Reihe von Einträgen aus einem benutzerdefinierten Satz von Tabellen auflistet. Ich habe die Hauptseite für das Plugin mit den folgenden WordPress-Funktionen hinzugefügt:

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

Wenn Sie nun den obigen Code genau lesen, stellen Sie fest, dass es einen Kommentar gibt, der besagt: 'I Need Help Here' ; Hier sind weitere Details:

Ich kann alles auf der Admin-Seite anzeigen, die ich erstellt habe. Die Administrationsseite liest die benutzerdefinierten Tabellen aus und zeigt die Ergebnisse als HTML-Tabellenzeilen an.

Ich muss nur jede Zeile mit einer Seite verknüpfen, nennen wir es 'Entry Details Page' . Die Idee ist, dass für jede Zeile in der HTML-Tabelle ein Link vorhanden ist. Wenn ich auf diesen Link klicke, werde ich zu einer anderen Seite weitergeleitet, auf der weitere Details zu dieser Zeile angezeigt werden.

Ich habe darüber nachgedacht, add_submenu_page wie in here beschrieben zu verwenden, aber ehrlich gesagt habe ich nicht verstanden, wie man es verwendet und wie man es in meinen Code einbindet. Ich habe so etwas versucht, aber ich denke, es ist falsch:

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
}

Die beiden Probleme, mit denen ich konfrontiert bin, sind:

  1. Wie füge ich die Detailseite korrekt hinzu (es ist klar, dass das, was ich oben im zweiten Codeausschnitt mache, falsch ist)?
  2. Wie kann ich Parameter in die Detailseite aufnehmen (ich muss eine Zeilen-ID übergeben, um die Details anzuzeigen)?

Ich glaube, ich bin kurz davor, das Problem zu lösen, aber ich konnte nicht genug Dokumentation finden, um es zu beenden. Bitte helfen Sie mir, und ich danke Ihnen wirklich sehr.

Prost.

5
Greeso

Ich bin weniger überzeugt, dass ich weiß, was Sie tun, als ich es einmal war.

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

Sie verwenden dort zwei zusätzliche Kernfunktionen als Referenz:

10
s_ha_dum

Es ist besser, der URL einen weiteren Parameter hinzuzufügen und diesen als "Aktion" zu bezeichnen und basierend auf der Aktion eine andere Vorlage für eine andere Aktion zu rendern.

Vorteil: Das Menü bleibt geöffnet (aktiv). In der obigen Lösung bleibt das Menü für ein ausgeblendetes Menü nicht geöffnet, da die übergeordneten Elemente eines Untermenüs technisch entfernt werden.

0
Mayur Chauhan