Creare una pagina admin in WordPress senza menu per un plugin
Sto scrivendo un plugin che elencherà una serie di voci da un set personalizzato di tabelle. Ho aggiunto la pagina principale del plugin utilizzando le seguenti funzioni di WordPress:
// Aggiungi menu e pagine all'area admin di WordPress
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() {
// Codice per visualizzare la pagina admin del mio plugin (sia php che html)
// Questo include il seguente pseudo codice (in php)
foreach ($results_from_db as $result) {
// CODICE PER VISUALIZZARE I RISULTATI IN UNA TABELLA HTML *** HO BISOGNO DI AIUTO QUI ***
}
}
Ora, se leggi attentamente il codice sopra, noterai un commento che dice 'HO BISOGNO DI AIUTO QUI'; ecco maggiori dettagli:
So come visualizzare tutto nella pagina admin che ho creato. La pagina admin leggerà dalle tabelle personalizzate e mostrerà i risultati come righe di una tabella HTML.
Ho solo bisogno di collegare ogni riga a una pagina, chiamiamola 'Pagina Dettagli Voce'. L'idea è che per ogni riga nella tabella HTML ci sarà un link, e quando clicco su quel link, mi porterà a un'altra pagina che mostra più dettagli su quella riga.
Stavo pensando di usare add_submenu_page come descritto qui, ma onestamente non ho capito come usarlo e come includerlo nel mio codice. Ho provato qualcosa del genere ma penso sia sbagliato:
function myplugin_admin_page() {
// Codice per visualizzare la pagina admin del mio plugin (sia php che html)
// Questo include il seguente pseudo codice (in php)
foreach ($results_from_db as $result) {
// CODICE PER VISUALIZZARE I RISULTATI IN UNA TABELLA HTML *** HO BISOGNO DI AIUTO QUI ***
// La seguente riga di codice è errata, ma per mostrarti l'idea
echo '<a href="' . add_submenu_page(NULL,'Entry Details Page','Entry Details Page','manage_options','details-page', 'myplugin_details_page'); . '">Visualizza</a>';
}
}
function myplugin_details_page() {
// Codice per visualizzare la pagina dei dettagli
}
Ora, i due problemi che sto affrontando sono:
- Come aggiungere correttamente la pagina dei dettagli (è chiaro che quello che sto facendo nel secondo snippet di codice è sbagliato)?
- Come includere parametri nella pagina dei dettagli (devo passare un ID di riga per visualizzare i dettagli)?
Penso di essere molto vicino a risolvere il problema, tuttavia non ho trovato abbastanza documentazione per completarlo, quindi per favore aiutami, e ti ringrazio davvero molto.
Saluti.

Sono meno convinto di capire cosa stai facendo rispetto a prima.
// Aggiunge menu e pagine all'area amministrativa di WordPress
add_action('admin_menu', 'myplugin_create_top_level_menu');
function myplugin_create_top_level_menu() {
// Questo è il menu laterale
add_menu_page(
'MyPlugin',
'MyPlugin',
'manage_options',
'myplugin-top-level-page'
);
// Questa è la prima pagina visualizzata quando si clicca sul menu
add_submenu_page(
'myplugin-top-level-page',
'Pagina Principale MyPlugin',
'Pagina Principale MyPlugin',
'manage_options',
'myplugin-top-level-page',
'myplugin_top_level_page_callback'
);
// Questa è la pagina nascosta
add_submenu_page(
null,
'Pagina Dettagli MyPlugin',
'Pagina Dettagli MyPlugin',
'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', // come definito nella pagina nascosta
'id' => $id
),
admin_url('admin.php')
);
echo '<ul>';
echo '<li><a href="'.$link.'">'.$id.'</a><li>';
echo '</ul>';
}
}
function myplugin_details_page_callback () {
// Questa funzione serve a visualizzare la pagina nascosta (html e php)
}
Stai usando due funzioni Core aggiuntive qui, per riferimento:

Grazie per la tua risposta. Tuttavia, ho bisogno di creare due pagine separate. Ti faccio un esempio. Nell'admin di WordPress, se clicchi su POSTS, vedrai un elenco di post per il tuo sito. Per ogni post, puoi cliccare su EDIT per visualizzare i dettagli di quel particolare post. I dettagli del post sono collegati solo tramite l'elenco dei post. Inoltre, postID viene passato a questa pagina di modifica, in modo che possa visualizzare il post corretto. Sto facendo la stessa cosa ma per un plugin, come descritto nella mia domanda.

È meglio aggiungere un altro parametro nell'URL e chiamarlo "action" e in base all'azione renderizzare un template diverso per azioni differenti.
Vantaggio: Mantiene il menu aperto (attivo). Nella soluzione precedente, non manterrà il menu aperto per un menu nascosto dato che tecnicamente stiamo rimuovendo il genitore di un sottomenu.
