¿Cómo redirigir a una página de administración diferente en WordPress?

3 minutos de lectura

Estoy escribiendo un complemento de WordPress.

Quiero realizar una redirección (después de crear registros DB a partir de datos POST, etc.) a otra página ADMIN.

Ni header(“Ubicación: …) ni wp_redirect() funcionan – obtengo

Advertencia: no se puede modificar la información del encabezado; los encabezados ya los envió

que proviene de una razón obvia.

¿Cómo realizo correctamente una redirección en un WordPress?

En la acción de su formulario, agregue ‘noheader=true’ a la URL de la acción. Esto evitará que los encabezados del área de administración se muestren antes de su redirección. Por ejemplo:

<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post">

  • … ¡el horror! ¡Perdí como 4 horas tratando de superar esto! ¿Por qué wordpress no sugiere agregar eso a la URL? ¡Gracias! Votaría cien veces más si pudiera.

    – Kai Qing

    21 de agosto de 2013 a las 20:09

Si aún desea redirigir desde la página de administración de su complemento a otra página de administración mientras usa las funciones WP add_page *, luego de procesar su solicitud, puede hacer eco de algo como esto:

<script type="text/javascript">
window.location = '/whatever_page.php';
</script>

Esto solo genera una redirección basada en javascript a “/whatever_page.php”, lo que garantiza que no haya problemas con los encabezados ya enviados por WP como ya dijo Chris Ballance.

Cambie “/whatever_page.php” a algo como “/wp-admin/admin.php?page=whatever_page”

  • ¡Este debería ser el último recurso!

    – PinoyStackOverflower

    13 de enero de 2015 a las 7:23

Para un enlace agregado con add_submenu_page (o función relacionada), use el $hook_suffix devuelto para agregar una acción a “load-$hook_suffix” y redirija allí. Así es como se conecta a la carga de la página antes de que comience la salida.

Creo que lo estaba haciendo de la manera incorrecta.

Mi código estaba dentro de una llamada add_menu_page() dentro de add_action(‘admin_menu’, …)

que probablemente se llame más tarde durante la solicitud (después de que se haya creado y mostrado el encabezado de la página).

Mover mi código fuera de los identificadores de mi complemento, al alcance principal funcionó: necesita algo de limpieza y correcciones, pero la redirección funciona.

De todos modos, gracias por las respuestas.

Supongo que solo debe asegurarse de que wp_redirect() llegue antes de que se envíe cualquier salida.

Debe asegurarse de que no se envíe nada a la salida http antes de que se realice la redirección.

Puede establecer “ventana.ubicación(‘nuevaubicación’);” y eso aún le permitirá redirigir después de que la salida se haya enviado al navegador.

avatar de usuario
Andy

Cárguelo en template_redirect.

add_action('template_redirect', 'myplugin_template_redirect');

function myplugin_template_redirect() {  
   wp_redirect('http://www.example.com/', 301);
}

  • template_redirect no es un gancho de acción disponible dentro del backend de administración de WordPress.

    – CFX

    14 de octubre de 2014 a las 4:26

¿Ha sido útil esta solución?

¿Cómo redirigir a una página de administración diferente en WordPress?

3 minutos de lectura

Estoy escribiendo un complemento de WordPress.

Quiero realizar una redirección (después de crear registros DB a partir de datos POST, etc.) a otra página ADMIN.

Ni header(“Ubicación: …) ni wp_redirect() funcionan – obtengo

Advertencia: no se puede modificar la información del encabezado; los encabezados ya los envió

que proviene de una razón obvia.

¿Cómo realizo correctamente una redirección en un WordPress?

En la acción de su formulario, agregue ‘noheader=true’ a la URL de la acción. Esto evitará que los encabezados del área de administración se muestren antes de su redirección. Por ejemplo:

<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post">

  • … ¡el horror! ¡Perdí como 4 horas tratando de superar esto! ¿Por qué wordpress no sugiere agregar eso a la URL? ¡Gracias! Votaría cien veces más si pudiera.

    – Kai Qing

    21 de agosto de 2013 a las 20:09

Si aún desea redirigir desde la página de administración de su complemento a otra página de administración mientras usa las funciones WP add_page *, luego de procesar su solicitud, puede hacer eco de algo como esto:

<script type="text/javascript">
window.location = '/whatever_page.php';
</script>

Esto solo genera una redirección basada en javascript a “/whatever_page.php”, lo que garantiza que no haya problemas con los encabezados ya enviados por WP como ya dijo Chris Ballance.

Cambie “/whatever_page.php” a algo como “/wp-admin/admin.php?page=whatever_page”

  • ¡Este debería ser el último recurso!

    – PinoyStackOverflower

    13 de enero de 2015 a las 7:23

Para un enlace agregado con add_submenu_page (o función relacionada), use el $hook_suffix devuelto para agregar una acción a “load-$hook_suffix” y redirija allí. Así es como se conecta a la carga de la página antes de que comience la salida.

Creo que lo estaba haciendo de la manera incorrecta.

Mi código estaba dentro de una llamada add_menu_page() dentro de add_action(‘admin_menu’, …)

que probablemente se llame más tarde durante la solicitud (después de que se haya creado y mostrado el encabezado de la página).

Mover mi código fuera de los identificadores de mi complemento, al alcance principal funcionó: necesita algo de limpieza y correcciones, pero la redirección funciona.

De todos modos, gracias por las respuestas.

Supongo que solo debe asegurarse de que wp_redirect() llegue antes de que se envíe cualquier salida.

Debe asegurarse de que no se envíe nada a la salida http antes de que se realice la redirección.

Puede establecer “ventana.ubicación(‘nuevaubicación’);” y eso aún le permitirá redirigir después de que la salida se haya enviado al navegador.

avatar de usuario
Andy

Cárguelo en template_redirect.

add_action('template_redirect', 'myplugin_template_redirect');

function myplugin_template_redirect() {  
   wp_redirect('http://www.example.com/', 301);
}

  • template_redirect no es un gancho de acción disponible dentro del backend de administración de WordPress.

    – CFX

    14 de octubre de 2014 a las 4:26

¿Ha sido útil esta solución?