Adaugă meniu și submeniu în admin cu URL în loc de slug?

30 ian. 2013, 15:06:10
Vizualizări: 24K
Voturi: 6

Folosesc această funcție și hook:

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

Afișează ceea ce am nevoie: un meniu cu un submeniu în bara de meniu din stânga panoului de administrare.

Problema este că submeniul duce către această pagină: admin.php?page=xxx.

Cum pot face să direcționez către un URL precum edit-tags.php?taxonomy=category?

Dacă înlocuiesc slug-ul în add_submenu_page cu un URL relativ, link-ul va duce către admin.php?page=edit-tags.php?taxonomy=category.

Indiferent ce fac, obțin mereu admin.php?page=... ceea ce nu este ceea ce îmi doresc.

1
Comentarii

vezi exemplul actualizat =)

Oleg Butuzov Oleg Butuzov
31 ian. 2013 08:02:45
Toate răspunsurile la întrebare 5
0
13

Acesta este un post vechi, dar nu poți folosi variabilele globale WordPress $menu și/sau $submenu precum a sugerat Oleg la punctul 2?

Când ești în dubiu, copiază WordPress:

wordpress/wp-admin/menu.php

De exemplu, pentru a adăuga un link, acest lucru ar părea să funcționeze:

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

Poți înlocui $permalink = ... cu orice

Deci și acest lucru ar trebui să funcționeze:

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

De asemenea, se recomandă să nu folosești 'administrator' (deși și eu îl folosesc uneori). Citește acest ticket pentru soluții alternative.

26 iun. 2014 08:22:56
0

Nu recomand să faci asta.

Să presupunem că prefixul tău pentru admin.php este _trigger_me_

  1. Submeniu

    <?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. Meniu Principal

    <?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);
    

Numesc ambele exemple "hack-uri". Se pot face, dar e mai bine să nu le faci.

Actualizare.

în cazul în care ești mulțumit cu redirecționarea =)

<?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;
'));

dacă vrei să înlocuiești asta cu o pagină de taxonomie (edit-tags.php)

<?php
add_action('admin_menu', 'admin_menu_edit_tags_page');
function admin_menu_edit_tags_page(){
    // te rog setează $YOURPARENTSLUG ca slug-ul părinte al elementului tău de meniu (părintele meniului tău)
    // manage_tags în manage_terms pentru capacitatea taxonomiei tale (e vizibil când faci var_dump($wp_taxonomies[$taxonomyyouwant]));
    add_submenu_page($YOURPARENTSLUG, 'menu', 'title', 'manage_tags',  'edit-tags.php?taxonomy=taxonomy');
}
30 ian. 2013 16:06:07
0

Dacă submeniul tău nu are prefixul admin.php?page=, ar trebui să înregistrezi mai întâi meniul părinte, apoi submeniul.

add_action( 'admin_menu', function() {

// Mai întâi meniul părinte
add_menu_page( 'Titlul paginii', 'Titlul meniului', 'capabilitate', 'parent-slug', 'functie_callback' );

// Apoi submeniurile
add_submenu_page( 'parent-slug', 'Titlul paginii submeniu', 'Titlul submeniului', 'capabilitate', 'slug', 'functie_callback' );

} );

Altfel, link-ul va fi doar slug-ul.

18 iul. 2020 22:29:47
0

Mulțumesc Oleg, scriptul tău funcționează dar strică interfața de administrare (culoarea de fundal și imaginile dispar din anumite motive).

Dar dacă trebuie să merg pe această cale, pot face asta în schimb:

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 se pare curios că nu există o modalitate simplă de a lega un submeniu la orice URL. Acest tip de redirecționare este haotic... dar funcționează.

31 ian. 2013 01:55:40
0

Deși aceasta este o problemă veche, aș dori să contribui cu următorul cod pentru considerare:

function mysite_admin_menu() 
{
  add_menu_page( 'Categorii', 'Categorii', 'administrator', 'categories', 'a_function' );
  add_submenu_page( 'categories', 'Gestionează', 'Gestionează', 'administrator', 'manage_categories', 'mysite_manage_categories' );
  remove_submenu_page('categories','categories');
}
add_action( 'admin_menu', 'mysite_admin_menu' );

function mysite_manage_categories() 
{ 

?><script>window.location = "<?php echo admin_url('edit-tags.php?taxonomy=category'); ?>";</script><?php 
    }

folosește o redirecționare JavaScript în loc să creeze un alt add_action pentru redirecționare prin HTTP.

25 feb. 2016 01:45:56