Pregunta

¿Hay una manera de añadir un hipervínculo arbitraria al menú de administración de WordPress (me refiero al menú de la izquierda al iniciar sesión en el tablero de instrumentos de administración)? Por ejemplo, se puede añadir un enlace a Google?

En mi caso particular, me gustaría añadir una página guía de estilo para un tema de Wordpress que estoy trabajando para que pueda mostrar al usuario cómo los diferentes elementos HTML están decoradas con el tema y demostración de cómo el estilo de varias cosas muy bien .

Este es el código que tengo hasta ahora ( Nota: es incompleta ): En functions.php He añadido un nuevo elemento de menú en el Apariencia sección:

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(), tratando de redirigir con header() da un error ( No se puede modificar la información de cabecera ).

¿Fue útil?

Solución

Hola @ Tom

Si entiendo bien su pregunta no lo hace tanto necesidad de saber cómo añadir un enlace al menú (parece que ya saben que) pero en cambio tiene que aprender cómo conseguir su enlace para redirigir correctamente, ¿verdad?

a redirigir a una URL externa desde un ítem del menú Administrador

Si es así lo que hay que hacer es no utilizar la función de elemento de menú, pero en lugar de "gancho" WordPress con suficiente antelación tal que tiene todo lo que no de salida, excepto posiblemente las cabeceras HTTP. El primer gancho al llamar /wp-admin/themes.php parece ser after_setup_theme y parece que funciona bien.

Utilice un "Menú Slug" para que pueda probar por ella en un gancho

Sin embargo, para conseguir que funcione en primer lugar hay que modificar su llamada a add_theme_page en el / la función admin_menu gancho 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ú babosa" ) para ser themes.php?goto=build-styleguide-page.

A pesar de que podríamos haber elegido casi literalmente cualquier cosa por el cuarto parámetro, dado que vamos a redirigir he creado una ruta a la misma página (themes.php) como otras opciones de apariencia de consistencia. También llegué arbitrariamente con 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 lo necesitamos para esta solución.

Remitir dentro del gancho Apertura de themes.php: after_setup_theme

A medida que nuestro último bit de código que implementar nuestro gancho after_setup_theme en nuestra función redirect_from_admin_menu(). Tenemos que probar para ver si la página actual es themes.php y asegurar un parámetro de URL de goto fue aprobada en la URL. Entonces se pone a prueba el valor de goto utilizando una sentencia switch / case para ver si tiene un valor de 'build-styleguide-page'; si es así, vuelve a dirigir a su ejemplo hipotético indicado Google lo contrario simplemente redirigir regresará 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. he optado por utilizar la instrucción switch / case en la función de enlace after_setup_theme / redirect_from_admin_menu() por lo que sería más fácil añadir redirecciones goto adicionales si es necesario; sólo tiene que añadir más sentencias de caso.

  2. las funciones wp_redirect() y wp_safe_redirect() en realidad no terminan; necesita emitir una declaración explícita de salida para llegar a la parada de WordPress y no anular su redireccionamiento.

Espero que esto ayude!

Otros consejos

Si se agrega el elemento en el menú mediante la adición a la matriz $submenu directamente evitará la necesidad de hacer la redirección y ser capaz de utilizar una dirección URL completa fuera del sitio como el enlace del menú (hago esto por mí mismo).

add_action( 'admin_menu' , 'admin_menu_new_items' );
function admin_menu_new_items() {
    global $submenu;
    $submenu['index.php'][500] = array( 'Menu item name', 'manage_options' , 'http://example.com' ); 
}  

index.php representa la clave / enlace del menú principal, por lo que en el ejemplo que estoy básicamente añadir un elemento a la menú del tablero de instrumentos ..

Está claro que no es tan bonito como el uso de las funciones add_{type}_page, pero sí con el trabajo en torno a los previene hecho de WordPress URL fuera de las instalaciones en los enlaces del menú de administrador ..

Yo uso algo similar a añadir mis varias máquinas virtuales en el menú, así que puede cambiar a otras instalaciones directamente desde el menú de administración (todo hecho con un guión, pero básicamente utiliza una versión glorificada del código anterior).

NOTA:. Si decide utilizar el código, pero tenga cuidado de no asignar una clave que está en uso (la clave 500 de matriz en el código de ejemplo)

Consejo:. En realidad se puede utilizar valores negativos en las teclas de menú a, por lo que puede forzar a los elementos del menú para sentarse antes de cualquiera de los elementos de WordPress nativa

he logrado lo mismo con esto:

function add_custom_menu_item(){
    add_menu_page( 'Menu Item Title', 'Page Title', 'manage_options', 'page_slug', 'function', 'dashicons-icon', 1 );
}
add_action( 'admin_menu', 'add_custom_menu_item' );

function custom_menu_item_redirect() {

    $menu_redirect = isset($_GET['page']) ? $_GET['page'] : false;

    if($menu_redirect == 'page_slug' ) {
        wp_safe_redirect( home_url('/my-page') );
        exit();
    }

}
add_action( 'admin_init', 'custom_menu_item_redirect', 1 );

Lo que se hace aquí es agregar elemento de menú y definir babosa, a continuación, en 'admin_init' comprobar si existe babosa y redirigir a la ubicación deseada.

Licenciado bajo: CC-BY-SA con atribución
scroll top