J'utilise cette fonction et accroche:
function mysite_admin_menu()
{
add_menu_page( 'Categories', 'Catégories', 'administrator', 'categories', 'a_function' );
add_submenu_page( 'categories', 'Manage', 'Manage', 'administrator', 'xxx', 'a_function' );
remove_submenu_page('categories','categories');
}
add_action( 'admin_menu', 'mysite_admin_menu' );
Il affiche ce dont j'ai besoin: un menu avec un sous-menu dans la barre de menus de gauche.
Le sous-menu mène à cette page: admin.php?page=xxx
.
Comment puis-je créer un lien vers une URL telle que edit-tags.php?taxonomy=category
?
Si j'échange le slug dans le add_submenu_page
avec une URL relative, le lien mènera à admin.php?page=edit-tags.php?taxonomy=category
.
Quoi que je fasse, je reçois toujours admin.php?page=...
, ce qui n'est pas ce que je veux.
Ceci est un ancien post, mais vous ne pouvez pas simplement utiliser wordpress $menu
et/ou $submenu
globals comme Oleg suggéré dans le numéro 2.
En cas de doute, copiez WordPress :
Par exemple, pour ajouter un lien, cela semble fonctionner:
function add_external_link_admin_submenu() {
global $submenu;
$permalink = admin_url( 'edit-tags.php' ).'?taxonomy=category';
$submenu['options-general.php'][] = array( 'Manage', 'manage_options', $permalink );
}
add_action('admin_menu', 'add_external_link_admin_submenu');
Vous pouvez remplacer le $permalink = ...
par n'importe quoi
Donc, cela devrait également fonctionner:
$permalink = 'http://www.example.com';
En outre, il est suggéré de ne pas utiliser "administrateur" (même si je l'utilise également. Quoi qu'il en soit, lisez ce ticket pour des solutions alternatives.
Je ne vous recommande pas de faire ça.
Supposons que votre préfixe pour admin.php
est _trigger_me_
Sous menu
<?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);
Menu 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);
J'appelle les deux exemples "hacks". Ils peuvent le faire, mais il vaut mieux ne pas le faire.
mettre à jour.
si cas si satisfait avec redirection =)
<?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;
'));
au cas où vous voudriez le remplacer par la page taxonomie (edit-tags.php
)
<?php
add_action('admin_menu', 'admin_menu_edit_tags_page');
function admin_menu_edit_tags_page(){
// please set $YOURPARENTSLUG as parent slug of your menu item (parent of your menu)
// manage_tags to manage_terms of your taxonomy capability (its visible whan you var_dump($wp_taxonomies[$taxonomyyouwant]));
add_submenu_page($YOURPARENTSLUG, 'menu', 'title', 'manage_tags', 'edit-tags.php?taxonomy=taxonomy');
}
Merci Oleg, votre script fonctionne mais casse l'interface d'administration (les couleurs d'arrière-plan et les images disparaissent pour une raison quelconque).
Mais si je dois prendre cette route, je peux le faire à la place:
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' );
Il me semble curieux qu’il n’existe pas de moyen simple de relier un sous-menu à une URL. Ce type de redirection est désordonné ... mais cela fonctionne.
Bien que ce soit un vieux problème, j'aimerais contribuer à l'examen de ce code:
function mysite_admin_menu()
{
add_menu_page( 'Categories', 'Catégories', 'administrator', 'categories', 'a_function' );
add_submenu_page( 'categories', 'Manage', 'Manage', '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
}
il utilise la redirection javascript au lieu de créer un autre add_action pour rediriger via http.