Adaugă o pagină de administrare, dar nu o afișa în meniul admin

22 nov. 2012, 16:35:50
Vizualizări: 20.9K
Voturi: 10

Am un plugin personalizat 'Charts' care are propriul său meniu. În acel meniu sunt link-uri către cele 3 pagini ale plugin-ului - 'Charts', 'Add Chart' și 'Edit Chart'. Cu toate acestea, nu vreau să afișez link-ul către 'Edit Chart'.

Iată cum adaug pagina în cauză -

$this->pagehook = add_submenu_page('charts', __('Edit Chart'), __('Edit Chart'), 'edit_charts', 'edit-chart', array(&$this, 'on_show_page'));

Am căutat pe internet și nu pot găsi o modalitate de a face acest lucru (care să funcționeze). Este posibil să elimini meniurile complete de nivel superior (nu asta am nevoie), și poți elimina intrări individuale din variabila globală $submenu (dar făcând asta se elimină și capacitatea înregistrată), așa că nimeni nu poate accesa pagina -

global $submenu;
if(!empty($submenu['charts'])) : foreach($submenu['charts'] as $key => $page) :
        if($page[0] === 'Edit Chart') :

            /** Elimină toate permisiunile de acces la pagină */
            //unset($submenu['charts'][$key]);              
            /** Elimină titlul, dar intrarea din meniu încă există, așa că arată ciudat */
            $submenu['charts'][$key][0] = '';

        endif;
    endforeach;
endif;

M-am uitat să o ascund prin CSS, dar nu pot vedea o modalitate de a face asta prin HTML-ul pe care îl generează WordPress -

<li><a href="admin.php?page=edit-chart" tabindex="1">Edit Chart</a></li>

M-am gândit și la jQuery, dar are limitări similare cu CSS, plus că refuz să cred că sunt singurul care a dorit vreodată să facă acest lucru - trebuie să existe o cale, doar că nu o pot găsi!

Orice sugestii și sfaturi sunt apreciate.

Mulțumesc.

1
Comentarii

Unde adaugi acest hook pentru funcție? Ce filtru/acțiune?

s_ha_dum s_ha_dum
22 nov. 2012 16:45:19
Toate răspunsurile la întrebare 3
3
32

Din documentația pentru add_submenu_page(), poți vedea că poți ascunde link-ul submeniului tău din elementul de meniu de nivel superior căruia îi aparține prin setarea slug (primul argument) la null:

add_action( 'admin_menu', 'register_my_custom_submenu_page' );

function register_my_custom_submenu_page() {
    add_submenu_page( 
        null,
        'Pagina mea personalizată de submeniu',
        'Pagina mea personalizată de submeniu',
        'manage_options',
        'my-custom-submenu-page',
        'my_custom_submenu_page_callback',
    );
}

Pentru a evidenția elementul de meniu dorit (de ex. 'toate graficele' când accesezi pagina ascunsă 'editare grafic'), poți face următoarele:

add_filter( 'submenu_file', function($submenu_file){
    $screen = get_current_screen();
    if($screen->id === 'id-of-page-to-hide'){
        $submenu_file = 'id-of-page-to-higlight';
    }
    return $submenu_file;
});
19 sept. 2015 15:32:20
Comentarii

Super, dar evidențierea nu funcționează corect. Dacă setez submenu_file acestea sunt afișate ca fiind curente. Dar meniul de nivel superior nu se deschide. Dacă setez parent_file, WordPress rulează funcția get_admin_page_parent() după filtre și o schimbă înapoi. De ce au adăugat dezvoltatorii WordPress filtrul parent_file dacă oricum funcția îl schimbă înapoi? Poți ajuta?

DARK_DIESEL DARK_DIESEL
28 aug. 2018 16:11:17

De asemenea, dacă parent_slug este setat ca null, page_title nu este folosit în titlu.

DARK_DIESEL DARK_DIESEL
28 aug. 2018 16:12:10

Poți folosi 'options.php' în loc de null.

RavanH RavanH
20 mar. 2019 01:58:01
1
12

Folosește o pagină de submeniu ca slug părinte. Meniul de administrare are doar două niveluri, așa că al treilea nivel imaginar va fi ascuns.

Cod exemplu, testat:

add_action( 'admin_menu', 'wpse_73622_register_hidden_page' );

function wpse_73622_register_hidden_page()
{
    add_submenu_page(
        'options-writing.php',
        'Ascuns!',
        'Ascuns!',
        'exists',
        'wpse_73622',
        'wpse_73622_render_hidden_page'
    );
    # /wp-admin/admin.php?page=wpse_73622
}

function wpse_73622_render_hidden_page()
{
    echo '<p>salut lume</p>';
}
22 nov. 2012 16:56:05
Comentarii

Aceasta funcționează, dar ceea ce nu funcționează este starea activă a elementului părinte din meniu care se pierde, astfel încât submeniul se închide și niciun element părinte din meniu nu este selectat în bara laterală stângă.

Lee Lee
1 aug. 2016 12:50:30
0

Puteți utiliza CSS și veți putea accesa linkul prin URL-ul din tag-ul href:

#adminmenu a[href="admin.php?page=edit-chart"] { 
    display: none;
}

Nu există padding-uri sau spații suplimentare pentru elementul LI părinte, așa că nu este nevoie să-l ascundeți. De asemenea, veți putea accesa în continuare submeniul.

31 mar. 2021 16:25:50