2009-01-30 49 views
10

Estoy escribiendo un plugin de Wordpress.¿Cómo redirigir a una página de administración diferente en Wordpress?

Deseo realizar un redireccionamiento (después de crear registros de base de datos de POST, etc ...) a otra página de ADMIN.

Ni header ("Location: ...) ni wp_redirect() Trabajo - me sale

Advertencia:. No se puede modificar la información de cabecera - cabeceras ya enviado por

que proviene de la razón obvia

¿Cómo realizar un redireccionamiento adecuadamente en un Wordpress?

Respuesta

37

En su acción de formulario, agregue 'noheader = true' a la URL de acción. Esto evitará que se generen los encabezados para el área de administración 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"> 
+0

¡Oh hombre! ¡Me salvaste! ¡Gracias una tonelada! – alumi

+1

... ¡el horror! ¡Perdí 4 horas tratando de superar esto! ¿Por qué wordpress no sugiere agregar eso a la url? ¡Gracias! Yo hubiera votado cien veces más si pudiera. –

+0

Buena respuesta .... –

0

es necesario asegurarse de que nada se envía a la salida HTTP antes de la redirección tiene lugar.

Puede establecer "window.location ('newlocation');" y eso aún le permitirá redirigir una vez que se haya enviado la salida al navegador.

+0

Intenta establecer window.location y realiza la redirección con javascript. –

+0

Lo sé, pero la salida proviene de .../wp-admin/menu-header.php: 128 que es un archivo estándar de WordPress. Podría probar ob_start + ob_ * - pero esto parece ser un poco hackish. –

0

Supongo que solo tiene que asegurarse de que wp_redirect() viene antes de que se haya enviado alguna salida.

1

Creo que lo estaba haciendo mal.

Mi código estaba dentro de un add_menu_page() dentro add_action ('admin_menu', ...) llamar

que probablemente se llamó más tarde durante la solicitud (después de cabecera de la página ha sido creada y se visualiza).

Moviendo mi código fuera de mis manejadores de complementos, en el alcance principal funcionó - necesita un poco de limpieza y arreglos, pero la redirección funciona.

De todos modos, gracias por las respuestas.

-1

Colóquelo en template_redirect.

add_action('template_redirect', 'myplugin_template_redirect'); 

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

'template_redirect' no es un gancho de acción disponible en el back-end de administración de WordPress. – cfx

2

Si todavía quiere volver a dirigir desde su página de administración plugin para otra página de administración durante el uso de funciones WP add_page * a continuación, después de procesar su solicitud, sólo puede repetir algo como esto:

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

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

Cambio "/whatever_page.php" a algo así como "/wp-admin/admin.php?page=whatever_page"

+0

¡Este debería ser el último recurso! – PinoyStackOverflower

2

Para un enlace añadido con add_submenu_page (o función relacionada), utilice el devuelto $ hook_suffix añadir una acción a "load- $ hook_suffix" y hacer la redirección allí. Así es como se conecta a la carga de la página antes de que la salida haya comenzado.

Cuestiones relacionadas