menus – ¿Agregar un enlace arbitrario al menú de administración?

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:

  1. Elegí usar la declaración switch / case en la función after_setup_theme hook / redirect_from_admin_menu() para que sea más fácil agregar redirecciones goto adicionales si es necesario; simplemente agregue más declaraciones de casos.

  2. las wp_redirect() y wp_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!

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım