Crearea unei pagini de administrare WordPress fără meniu pentru un plugin
Scriu un plugin care va afișa o serie de intrări dintr-un set personalizat de tabele. Am adăugat pagina principală pentru plugin folosind următoarele funcții WordPress:
// Adaugă meniul și paginile în zona de administrare 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 {
// Cod pentru afișarea paginii de administrare a pluginului meu (atât PHP cât și HTML)
// Aceasta include următorul cod pseudo (în PHP)
foreach ($results_from_db as $result) {
// COD PENTRU AFIȘAREA REZULTATELOR ÎNTR-O TABELĂ HTML *** AM NEVOIE DE AJUTOR AICI ***
}
}
Dacă citiți codul de mai sus cu atenție, observați că există un comentariu care spune 'AM NEVOIE DE AJUTOR AICI'; iată mai multe detalii:
Știu cum să afișez totul pe pagina de administrare pe care am creat-o. Pagina de administrare va citi din tabelele personalizate și va afișa rezultatele ca rânduri într-un tabel HTML.
Am nevoie doar să leg fiecare rând la o pagină, să o numim 'Pagina de Detalii Intrare'. Ideea este că pentru fiecare rând din tabelul HTML, va exista un link, iar când dau click pe acel link, să mă ducă pe o altă pagină care afișează mai multe detalii despre acel rând.
M-am gândit să folosesc add_submenu_page cum este descris aici, dar sincer nu am înțeles cum să o folosesc și cum să o includ în codul meu. Am încercat ceva de genul acesta dar cred că este greșit:
function myplugin_admin_page {
// Cod pentru afișarea paginii de administrare a pluginului meu (atât PHP cât și HTML)
// Aceasta include următorul cod pseudo (în PHP)
foreach ($results_from_db as $result) {
// COD PENTRU AFIȘAREA REZULTATELOR ÎNTR-O TABELĂ HTML *** AM NEVOIE DE AJUTOR AICI ***
// Următoarea linie de cod este incorectă, dar pentru a vă arăta ideea
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 () {
// Cod pentru afișarea paginii de detalii
}
Acum, cele două probleme cu care mă confrunt sunt:
- Cum să adaug corect pagina de detalii (este clar că ceea ce fac mai sus în al doilea fragment de cod este incorect)?
- Cum să includ parametri în pagina de detalii (trebuie să transmit un ID de rând pentru a vizualiza detaliile)?
Cred că sunt foarte aproape de rezolvarea problemei, dar nu am găsit suficientă documentație pentru a o finaliza, așa că vă rog să mă ajutați, și vă mulțumesc foarte mult.
Toate cele bune.

Sunt mai puțin convins că știu ce faci decât eram odată.
// Adaugă meniul și paginile în zona de administrare WordPress
add_action('admin_menu', 'myplugin_create_top_level_menu');
function myplugin_create_top_level_menu() {
// Acesta este meniul din partea laterală
add_menu_page(
'MyPlugin',
'MyPlugin',
'manage_options',
'myplugin-top-level-page'
);
// Aceasta este prima pagină afișată când se face clic pe meniu
add_submenu_page(
'myplugin-top-level-page',
'Pagina Principală MyPlugin',
'Pagina Principală MyPlugin',
'manage_options',
'myplugin-top-level-page',
'myplugin_top_level_page_callback'
);
// Aceasta este pagina ascunsă
add_submenu_page(
null,
'Pagina de Detalii MyPlugin',
'Pagina de Detalii 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', // definită în pagina ascunsă
'id' => $id
),
admin_url('admin.php')
);
echo '<ul>';
echo '<li><a href="'.$link.'">'.$id.'</a><li>';
echo '</ul>';
}
}
function myplugin_details_page_callback () {
// Această funcție afișează pagina ascunsă (html și php)
}
Folosești două funcții suplimentare din Core, așa că pentru referință:

Mulțumesc pentru răspuns. Totuși, trebuie să creez două pagini separate. Voi da un exemplu. În administrarea WordPress, dacă dai clic pe POSTĂRI, vei vedea o listă de articole pentru site-ul tău. Pentru fiecare articol, poți da clic pe EDITARE pentru a vizualiza detaliile despre acel articol specific. Detaliile despre articol sunt accesibile doar prin intermediul listei de articole. De asemenea, ID-ul articolului este transmis către această pagină de editare, astfel încât să poată afișa articolul corect. Fac același lucru, dar pentru un plugin, așa cum am descris în întrebarea mea.

Este mai bine să adăugați un alt parametru în URL și să-l numiți "action" și, în funcție de acțiune, să afișați un șablon diferit pentru fiecare acțiune.
Beneficiu: Acest lucru va menține meniul deschis (activ). În soluția de mai sus, meniul nu va rămâne deschis pentru un meniu ascuns, deoarece, tehnic, eliminăm părintele unui submeniu.
