it-swarm.com.de

Fügen Sie eine Admin-Seite hinzu, aber zeigen Sie sie nicht im Admin-Menü an

Ich habe ein benutzerdefiniertes Plugin "Charts", das ein eigenes Menü hat. In diesem Menü befinden sich Links zu den 3 Seiten für das Plugin - 'Charts', 'Add Chart' und 'Edit Chart'. Ich möchte den Link zu "Diagramm bearbeiten" jedoch nicht anzeigen.

So füge ich die betreffende Seite hinzu:

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

Ich habe das Internet durchsucht und kann dazu keinen Weg finden (das funktioniert). Es ist möglich, ganze Menüs der obersten Ebene zu entfernen (nicht das, was ich brauche), und Sie können einzelne Einträge aus dem globalen $submenu entfernen (dabei wird jedoch auch die registrierte Funktion entfernt), sodass niemand auf die Seite zugreifen kann.

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

            /** Removes all permissions to access the page */
            //unset($submenu['charts'][$key]);              
            /** Removes the title, but the menu entry still exists, so it looks odd */
            $submenu['charts'][$key][0] = '';

        endif;
    endforeach;
endif;

Ich habe versucht, es über CSS auszublenden, kann aber keinen Weg finden, dies durch den HTML-Code zu erreichen, den Wordpress generiert.

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

Ich habe auch über jQuery nachgedacht, aber das hat ähnliche Einschränkungen wie die CSS-Route, und ich kann nicht glauben, dass ich der einzige bin, der dies jemals wollte - es muss einen Weg geben, ich kann ihn einfach nicht finden!

Alle Hinweise und Tipps geschätzt.

Vielen Dank.

7
David Gard

Verwenden Sie eine Untermenüseite als übergeordnetes Element. Das Admin-Menü hat nur zwei Ebenen, sodass die imaginäre dritte Ebene ausgeblendet wird.

Beispielcode, getestet:

add_action( 'admin_menu', 'wpse_73622_register_hidden_page' );

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

function wpse_73622_render_hidden_page()
{
    echo '<p>hello world</p>';
}
8
fuxia

In den Dokumenten zu add_submenu_page() sehen Sie, dass Sie Ihren Untermenü-Link vor einem Menüelement der obersten Ebene verbergen können, zu dem er gehört, indem Sie slug(1. Argument) auf nullsetzen:

add_action( 'admin_menu', 'register_my_custom_submenu_page' );

function register_my_custom_submenu_page() {
    add_submenu_page( 
        null,
        'My Custom Submenu Page',
        'My Custom Submenu Page',
        'manage_options',
        'my-custom-submenu-page',
        'my_custom_submenu_page_callback',
    );
}

Um das gewünschte Menüelement (z. B. "Alle Diagramme" beim Zugriff auf die ausgeblendete Seite "Diagramm bearbeiten") hervorzuheben, haben Sie folgende Möglichkeiten:

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;
});
22
lanicor