Как добиться Post-Redirect-Get на странице меню администратора плагина Wordpress?

Я пишу плагин Wordpress, который добавляет страницу меню администратора. На странице есть форма. Когда форма отправлена, плагин записывает в базу данных. Но затем я сталкиваюсь с проблемой: всякий раз, когда пользователь перезагружает страницу, его спрашивают, отправлять ли POSTDATA снова. Если пользователь нажимает «да», плагин снова записывает в базу данных.

После некоторых поисков я нашел решение, шаблон "Post-Redirect-Get". Затем, позже, я обнаружил, что реализовать этот шаблон в плагине Wordpress сложно.

  1. Сам плагин не может отправить HTTP 301/302, потому что часть содержимого уже выведена ядром Wordpress.

  2. В заголовок HTML можно вставить метатег (чтобы выдать редирект). Но, согласно W3C, мета-перенаправление устарело, поэтому я думаю, что лучше его не использовать.

  3. Используйте JavaScript window.location. Но что, если JavaScript отключен в браузере пользователя?

Есть ли другой способ добиться перенаправления?


person Pellaeon    schedule 13.09.2010    source источник
comment
+1 за заботу о Post-Redirect-Get ... что-то, о чем 90% разработчиков Wordpress, вероятно, никогда не слышали.   -  person blockhead    schedule 13.09.2010


Ответы (3)


Вы можете попробовать выполнить обработку вашего плагина в хуке admin_init, который, как я полагаю, запускается до вывода любого контента.

person blockhead    schedule 13.09.2010
comment
+1. Подключиться к раннему действию, такому как admin_init, — это правильный путь. Также неплохо использовать функцию wp_redirect. - person mjangda; 13.09.2010

Чтобы сэкономить МНОГО работы. Просто используйте API настроек WordPress.

Статья Кодекса -> здесь

Более полезная статья Отто -> здесь

Использование API настроек WordPress позаботится о проблеме «Post-Redirect-Get», которую вы описываете.

person Darren    schedule 13.09.2010

  1. проверьте, существует ли таблица в базе данных, или вставьте в sql, если она не существует, чтобы не выполнить действие, если таблица существует в базе данных.

  2. опция set_option, где плагин активирован.

  3. используйте функцию wordpress register_activation_hook для включения опций активации плагина

извините за мой английский, очень плохой, но я думаю, вы можете понять

person user3293887    schedule 10.02.2014