Crearea unei pagini de administrare WordPress fără meniu pentru un plugin

24 feb. 2014, 00:34:41
Vizualizări: 16.3K
Voturi: 6

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:

  1. Cum să adaug corect pagina de detalii (este clar că ceea ce fac mai sus în al doilea fragment de cod este incorect)?
  2. 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.

2
Comentarii

Ai văzut asta https://github.com/tommcfarlin/WordPress-Plugin-Boilerplate

Brad Dalton Brad Dalton
24 feb. 2014 01:55:38

@BradDalton: Nu am văzut asta înainte, dar pare interesant. O să arunc o privire mai târziu.

Greeso Greeso
24 feb. 2014 07:14:29
Toate răspunsurile la întrebare 2
2
13

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ță:

24 feb. 2014 00:57:36
Comentarii

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.

Greeso Greeso
24 feb. 2014 01:06:59

Soluția ta nu a fost 100% corectă, dar a fost suficient de apropiată pentru a mă inspira să găsesc soluția corectă. Voi modifica răspunsul tău pentru a reflecta soluția corectă. Mulțumesc.

Greeso Greeso
24 feb. 2014 06:53:35
0

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.

11 oct. 2018 08:14:04