2009-01-30 9 views
10

J'écris un plugin Wordpress.Comment rediriger vers une page d'administration différente dans Wordpress?

Je souhaite effectuer une redirection (après avoir créé des enregistrements de base de données à partir de données POST, etc ...) vers une autre page ADMIN.

Ni header ("Location: ...) ni wp_redirect() travail - je reçois

Attention:. Ne peut modifier les informations d'en-tête - têtes déjà envoyés par

qui vient de la raison évidente

Comment puis-je effectuer correctement une redirection dans un Wordpress?

Répondre

37

Sur votre action formulaire, ajoutez 'noheader = true' à l'URL d'action. Cela empêchera la sortie des en-têtes de la zone d'administration avant votre redirection. Par exemple:

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

Oh mec! Tu m'as sauvé! Merci beaucoup! – alumi

+1

... l'horreur! J'ai juste gaspillé 4 heures à essayer de passer ça! Pourquoi WordPress ne suggère-t-il pas d'ajouter cela à l'url? Merci! Je ferais une centaine de fois de plus si je le pouvais. –

+0

Bonne réponse .... –

0

Vous devez vous assurer que rien ne soit envoyé à la sortie http avant que la redirection a lieu.

Vous pouvez définir "window.location ('newlocation');" et cela vous permettra quand même de rediriger après que la sortie a été envoyée au navigateur.

+0

Essayez de définir window.location et faites la redirection avec javascript. –

+0

Je le sais, mais la sortie vient de .../wp-admin/menu-header.php: 128 qui est un fichier wordpress standard. Je pourrais essayer ob_start + ob_ * - mais cela semble être un peu hackish. –

0

Je suppose que vous devez juste vous assurer que wp_redirect() vient avant que toute sortie ait été envoyée.

1

Je pense que je le faisais dans le mauvais sens.

Mon code était à l'intérieur d'un add_menu_page() à l'intérieur add_action ('admin_menu', ...) appelez

qui est probablement appelé plus tard lors de la demande (après-tête de page a été créé et affiché).

Déplacer mon code en dehors de mes poignées de plugin, dans la portée principale a travaillé - il a besoin d'un peu de nettoyage, et corrige, mais redirige les travaux.

En tout cas, merci pour les réponses.

-1

Chargez-le dans template_redirect.

add_action('template_redirect', 'myplugin_template_redirect'); 

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

'template_redirect' n'est pas un crochet d'action disponible dans le backend d'administration de WordPress. – cfx

2

Si vous voulez toujours rediriger sur votre page d'admin plugin à une autre page d'administration en utilisant WP add_page * fonctions puis, après le traitement de votre demande, vous pouvez me faire l'écho quelque chose comme ceci:

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

Cela rend juste une redirection basée sur javascript vers "/whatever_page.php", ce qui évite tout problème avec les en-têtes déjà envoyés par WP comme Chris Ballance l'a déjà dit.

Change "/whatever_page.php" à quelque chose comme "/wp-admin/admin.php?page=whatever_page"

+0

Cela devrait être le dernier recours! – PinoyStackOverflower

2

Pour un lien ajouté avec add_submenu_page (ou fonction liée), utilisez le retour hook_suffix $ pour ajouter une action à « $ hook_suffix load- » et faire la redirection là. C'est ainsi que vous accrochez au chargement de la page avant que la sortie ne commence.

Questions connexes