Hola @ Tom ,
Si entiendo su pregunta correctamente, no necesita saber cómo agregar un enlace al menú (parece que ya lo sabe), sino que debe aprender cómo hacer que su enlace se redirija correctamente, ¿verdad?
Redirigir a una URL externa desde un elemento del menú Admin
Si es así, lo que debe hacer es no usar la función del elemento del menú, sino "enganchar" WordPress lo suficientemente temprano como para que no genere nada excepto posiblemente encabezados HTTP. El primer enganche al llamar /wp-admin/themes.phpparece ser after_setup_themey parece funcionar bien.
Use un "Menú Slug" para que pueda probarlo en un gancho
Pero para que funcione, primero debemos modificar su llamada add_theme_pageen el admin_menuenlace / su create_theme_style_page()función. Eliminamos el quinto parámetro (la función para llamar para implementar la opción de administrador) porque no lo necesitamos, y cambiamos el cuarto parámetro ( "babosa de menú" ) para que sea themes.php?goto=build-styleguide-page.
Aunque podríamos haber elegido casi literalmente cualquier cosa para el cuarto parámetro, dado que vamos a redirigir, enrute a la misma página ( themes.php) que otras opciones de apariencia para mantener la coherencia. También se me ocurrió el nombre arbitrariamente gotoporque WordPress no lo usa y parece tener sentido para esto.
add_action('admin_menu', 'create_theme_style_page');
function create_theme_style_page() {
add_theme_page(
'Theme Styleguide',
'Theme Styleguide',
'administrator',
'themes.php?goto=build-styleguide-page'
);
}
Por cierto, nos deshicimos de su build_styleguide_page()función porque no la necesitamos para esta solución.
Redireccionar en el gancho más antiguo para themes.php:after_setup_theme
Como nuestro último fragmento de código, implementamos nuestro after_setup_themeenlace en nuestra redirect_from_admin_menu()función. Tenemos que probar para ver si la página actual es themes.phpy para asegurarnos de que gotose pasó un parámetro de URL en la URL. Luego prueba el valor de gotousar una instrucción switch/ casepara ver si tiene un valor de 'build-styleguide-page'; si es así, se redirige a su hipotética declarada, por ejemplo, Google, de lo contrario, simplemente redirigimos al panel de administración:
add_action('after_setup_theme', 'redirect_from_admin_menu');
function redirect_from_admin_menu($value) {
global $pagenow;
if ($pagenow=='themes.php' && !empty($_GET['goto'])) {
switch ($_GET['goto']) {
case 'build-styleguide-page':
wp_redirect("http://www.google.com");
break;
default:
wp_safe_redirect('/wp-admin/');
break;
}
exit;
}
}
Notas:
Elegí usar la instrucción switch/ caseen el after_setup_themeenlace / redirect_from_admin_menu()función para que sea más fácil agregar gotoredireccionamientos adicionales si es necesario; simplemente agregue más declaraciones de casos.
las funciones wp_redirect()y wp_safe_redirect()no terminan realmente; debe emitir explícitamente una declaración de salida para que WordPress se detenga y no anule su redirección.
¡Espero que esto ayude!
'-5'y no-5, de lo contrario la clave es considerado no válido (creo) .. (cadenas negativas trabaja sin embargo, si no me equivoco) ..array_push()agregar los elementos del menú para evitar chocar con otros complementos.global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] =etc.He logrado lo mismo con esto:
Lo que haces aquí es agregar un elemento de menú y definir slug, luego en 'admin_init' verifica si existe slug y redirige a la ubicación deseada.
fuente