Adaugă meniu și submeniu în admin cu URL în loc de slug?
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.

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:
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.

Nu recomand să faci asta.
Să presupunem că prefixul tău pentru admin.php
este _trigger_me_
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);
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');
}

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.

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ă.

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.
