Pregunta:
¿Hay alguna manera de agregar un hipervínculo arbitrario al menú de administración de WordPress (me refiero al menú de la izquierda cuando inicia sesión en el panel de administración)? Por ejemplo, ¿se puede agregar un enlace a Google?
En mi caso particular, me gustaría agregar una página de guía de estilo para un tema de WordPress en el que estoy trabajando para poder mostrar al usuario cómo se diseñan los diferentes elementos HTML con el tema y demostrar cómo diseñar varias cosas de manera agradable.
Este es el código que tengo hasta ahora ( nota: está incompleto ): En functions.php he agregado un nuevo elemento de menú en la sección Apariencia :
add_action('admin_menu', 'create_theme_style_page');
function create_theme_style_page() {
add_theme_page('Theme Styleguide', 'Theme Styleguide', 'administrator', basename(__FILE__),'build_styleguide_page');
}
function build_styleguide_page() {
echo "Not sure what goes here to redirect admin to a arbitrary url?";
}
En build_styleguide_page()
, intentar redirigir con header()
da un error ( No se puede modificar la información del encabezado ).
Respuesta:
Hola @ Tom ,
Si entiendo su pregunta correctamente, no necesita saber cómo agregar un enlace al menú (parece que ya lo sabe), sino que necesita aprender cómo hacer que su enlace se redirija correctamente, ¿verdad?
Redirigir a una URL externa desde un elemento del menú de administración
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 gancho al llamar a /wp-admin/themes.php
parece ser after_setup_theme
y parece funcionar bien.
Utilice un "menú Slug" para que pueda probarlo en un gancho
Pero para que funcione, primero debemos modificar su llamada a add_theme_page
en el gancho admin_menu
/ su función create_theme_style_page()
. Dejamos caer el quinto parámetro (la función a llamar para implementar la opción de administración) porque no lo necesitamos, y cambiamos el cuarto parámetro (el "menú slug" ) 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 la ruta I a la misma página ( themes.php
) que otras opciones de apariencia para themes.php
coherencia. También se me ocurrió arbitrariamente el nombre goto
porque 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 función build_styleguide_page()
porque no la necesitamos para esta solución.
Redirigir en el gancho más temprano para themes.php
: after_setup_theme
Como nuestro último fragmento de código, implementamos nuestro gancho after_setup_theme
en nuestra función redirect_from_admin_menu()
. Lo probamos para ver si la página actual es themes.php
y para asegurarnos de que se haya pasado un parámetro de URL de goto
en la URL. Luego prueba el valor de goto
usando una instrucción switch
/ case
para ver si tiene un valor de 'build-styleguide-page'
; si es así, redirige a su hipotético declarado, por ejemplo, Google; de lo contrario, simplemente lo redireccionamos 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 declaración
switch
/case
en la funciónafter_setup_theme
hook /redirect_from_admin_menu()
para que sea más fácil agregar redireccionesgoto
adicionales si es necesario; simplemente agregue más declaraciones de casos. -
las
wp_redirect()
ywp_safe_redirect()
realidad no terminan; debe emitir explícitamente una declaración de salida para que WordPress se detenga y no anule su redirección.
¡Espero que esto ayude!