views:

20

answers:

2

I am writing a Wordpress plugin, which adds an admin menu page. In the page is a form. When the form is submitted, the plugin writes to the database. But then I encounter a problem: whenever the user reloads the page, he/she is asked whether to send the POSTDATA again. If the user clicks yes, the plugin writes to the database again.

After some searching, I found a solution, the "Post-Redirect-Get" pattern. Then, later, I found that it's hard to implement this pattern into a Wordpress plugin.

  1. The plugin itself cannot send an HTTP 301/302 because there are some contents already outputted by the Wordpress core.

  2. It is possible to insert a meta tag (in order to issue a redirect) in the HTML head. But according to W3C, meta redirect is deprecated, so I think it's better not to use it.

  3. Use JavaScript's window.location. But what if JavaScript is disabled in the user's browser?

Is there any other way to achieve redirection?

+1  A: 

You could try doing your plugin's processing in the admin_init hook, which, I believe, is run before any content is output.

blockhead
+1. Hooking into an early action like `admin_init` is the way to go. Also a good idea to use the `wp_redirect` function.
mjangda
A: 

To save a LOT of work. Just use the WordPress settings api.

Codex article -> here

More helpful article by Otto -> here

Using the WordPress settings api will take care of the "Post-Redirect-Get" issue you are describing.

Darren