Aggiungere menu e sottomenu nell'admin con URL invece dello slug?

30 gen 2013, 15:06:10
Visualizzazioni: 24K
Voti: 6

Uso questa funzione e hook:

function mysite_admin_menu() 
{
  add_menu_page( 'Categories', 'Categorie', 'administrator', 'categories', 'a_function' );
  add_submenu_page( 'categories', 'Manage', 'Gestisci', 'administrator', 'xxx', 'a_function' );
  remove_submenu_page('categories','categories');
}
add_action( 'admin_menu', 'mysite_admin_menu' );

Visualizza quello che mi serve: un menu con un sottomenu nella barra del menu amministrativo di sinistra.

Il problema è che il sottomenu porta a questa pagina: admin.php?page=xxx.

Come posso fare per collegarlo a un URL come edit-tags.php?taxonomy=category?

Se sostituisco lo slug nel add_submenu_page con un URL relativo, il link porterà a admin.php?page=edit-tags.php?taxonomy=category.

Qualunque cosa io faccia, ottengo sempre admin.php?page=... che non è quello che voglio.

1
Commenti

guarda l'esempio aggiornato =)

Oleg Butuzov Oleg Butuzov
31 gen 2013 08:02:45
Tutte le risposte alla domanda 5
0
13

Questo è un vecchio post, ma non potresti semplicemente usare le variabili globali di WordPress $menu e/o $submenu come ha suggerito Oleg al punto 2.

Quando sei in dubbio, copia WordPress:

wordpress/wp-admin/menu.php

Ad esempio, per aggiungere un link sembra che questo potrebbe funzionare:

function add_external_link_admin_submenu() {
    global $submenu;
    $permalink = admin_url( 'edit-tags.php' ).'?taxonomy=category';
    $submenu['options-general.php'][] = array( 'Gestisci', 'manage_options', $permalink );
}
add_action('admin_menu', 'add_external_link_admin_submenu');

Puoi sostituire $permalink = ... con qualsiasi cosa

Quindi anche questo dovrebbe funzionare:

$permalink = 'http://www.example.com';

Inoltre, si suggerisce di non usare 'administrator' (anche se lo uso anch'io). Comunque, leggi questo ticket per soluzioni alternative.

26 giu 2014 08:22:56
0

Non ti consiglio di farlo.

Supponiamo che il tuo prefisso per admin.php sia _trigger_me_

  1. Sottomenu

    <?php
    
    function _clean_url_to_repalce_admin_menu($url, $original_url, $_context){
        if ($url == 'admin.php?page=_trigger_me_'){
            remove_filter('clean_url', '_clean_url_to_repalce_admin_menu', 10);
            //return admin_url('someotherpage.php);
            return 'http://google.com/';
        }
    }
    if (is_admin())
    add_filter('clean_url', '_clean_url_to_repalce_admin_menu', 10, 3);
    
  2. Menu Principale

    <?php
    function custom_admin_menu_action_hook(){
        global $menu;
        foreach($menu as $k=>$item){
            if ($item[2] == '_trigger_me_'){
                    $menu[$k][2] = 'http://google.com';
            }
        }
    }
    add_action('admin_menu', 'custom_admin_menu_action_hook', 100);
    

Chiamo entrambi gli esempi "hack". Sono possibili da fare, ma è meglio evitarli.

Aggiornamento.

Nel caso in cui ti accontenti di un reindirizzamento =)

<?php
$hook = add_submenu_page($parent, $title, $menu_title, 'manage_option', 'callback');
add_action("load-{$hook}", create_function('','
    header("Location:", admin_url("someurl.php?blahblahblah"));
    exit;
'));

Nel caso in cui tu voglia sostituirlo con una pagina di tassonomia (edit-tags.php)

<?php
add_action('admin_menu', 'admin_menu_edit_tags_page');
function admin_menu_edit_tags_page(){
    // imposta $YOURPARENTSLUG come slug genitore del tuo elemento di menu (genitore del tuo menu)
    // manage_tags a manage_terms della capability della tua tassonomia (è visibile quando fai var_dump($wp_taxonomies[$taxonomyyouwant]));
    add_submenu_page($YOURPARENTSLUG, 'menu', 'title', 'manage_tags',  'edit-tags.php?taxonomy=taxonomy');
}
30 gen 2013 16:06:07
0

Se il tuo sottomenu manca del prefisso admin.php?page=, dovresti prima registrare il menu genitore e poi il sottomenu.

add_action( 'admin_menu', function() {

// Prima il menu genitore
add_menu_page( 'Titolo della pagina', 'Titolo del Menu', 'capability', 'parent-slug', 'callback' );

// Poi i sottomenu
add_submenu_page( 'parent-slug', 'Titolo della pagina del sottomenu', 'Titolo del sottomenu', 'capability', 'slug', 'callback' );

} );

Altrimenti il link sarà semplicemente lo slug.

18 lug 2020 22:29:47
0

Grazie Oleg, il tuo script funziona ma interrompe l'interfaccia di amministrazione (i colori di sfondo e le immagini scompaiono tutti per qualche motivo).

Ma se devo seguire questa strada, posso fare invece questo:

function changeUrl()
{
    $pageURL = 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];

    if ($pageURL == 'http://www.mysite.com/wp-admin/admin.php?page=xxxx')
    {
        header ('location:http://www.mysite.com/wp-admin/edit-tags.php?taxonomy=category');
    }
}
add_action( 'admin_menu', 'changeUrl' );

Mi sembra curioso che non ci sia un modo semplice per collegare un sottomenu a qualsiasi URL. Questo tipo di reindirizzamento è confusionario... ma funziona.

31 gen 2013 01:55:40
0

Anche se si tratta di un problema datato, vorrei contribuire con questo codice per la vostra considerazione:

function mysite_admin_menu() 
{
  // Aggiunge un menu principale "Categories" nell'area di amministrazione
  add_menu_page( 'Categories', 'Categorie', 'administrator', 'categories', 'a_function' );
  
  // Aggiunge un sottomenu "Manage" sotto "Categories"
  add_submenu_page( 'categories', 'Manage', 'Gestisci', 'administrator', 'manage_categories', 'mysite_manage_categories' );
  
  // Rimuove il collegamento al menu principale che punta a se stesso
  remove_submenu_page('categories','categories');
}
// Registra la funzione durante l'hook admin_menu
add_action( 'admin_menu', 'mysite_admin_menu' );

function mysite_manage_categories() 
{ 
  // Reindirizza alla pagina di gestione delle categorie di WordPress
?><script>window.location = "<?php echo admin_url('edit-tags.php?taxonomy=category'); ?>";</script><?php 
}

Utilizza un reindirizzamento JavaScript invece di creare un altro add_action per il reindirizzamento HTTP.

25 feb 2016 01:45:56