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:
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é.
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:
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.