ПОЛУЧИТЬ параметры, которые мешают настройкам моего плагина
Мой плагин полностью настроен с помощью API настроек и работает, но у меня есть две ручные функции в моем плагине, которые могут быть запущены пользователем-администратором, посетив следующий URL-адрес
<?php echo admin_url(); ?>options-general.php?page=wordpress-file-monitor-plus&sc_wpfmp_action=1&sc_wpfmp_scan=1
<?php echo admin_url(); ?>options-general.php?page=wordpress-file-monitor-plus&sc_wpfmp_action=1&sc_wpfmp_reset_settings=1
Я использую крючок admin_init
для поиска этих параметров GET и выполнения этих функций.
Функции работают нормально, и пользователь вернулся на страницу настроек моего плагина, но параметры GET все еще находятся в URL-адресе. Не большая проблема, но если пользователь затем пойдет дальше и сохранит настройки, которые получают параметры, отправляются снова и, таким образом, снова запускают эти функции.
Почему API настроек отправляет эти параметры при отправке формы настроек? Действие формы состоит в том, чтобы отправить options.php
.
Единственный способ обойти мою проблему, который я могу придумать, это то, что после того, как эти ручные функции запустят свой код в admin_init
, это запустить перенаправление на страницу настроек без параметров GET, но если я это сделаю, я потеряю свои уведомления администратора, которые я пытаюсь показать пользователю. пользователь.
В любом случае, у меня есть какие-либо предложения о том, как я могу обойти эту проблему. Может быть, вы думаете, что есть лучший способ запустить эти ручные функции?
ИЗМЕНИТЬ: полный код настроек: http://pastebin.com/Gk5RF5Lc
1 answers
Почему API настроек отправляет эти параметры при отправке формы настроек?
Честно говоря, это не так. Как вы уже упоминали, ваша форма просто отправляет сообщение в options.php
, которое, в свою очередь, обрабатывает запрос, обновляет базу данных, а затем перенаправляет обратно отправителю.
Способ извлечения референта сводится к функции wp_get_referer()
;
function wp_get_referer() {
$ref = '';
if ( ! empty( $_REQUEST['_wp_http_referer'] ) )
$ref = $_REQUEST['_wp_http_referer'];
else if ( ! empty( $_SERVER['HTTP_REFERER'] ) )
$ref = $_SERVER['HTTP_REFERER'];
if ( $ref !== $_SERVER['REQUEST_URI'] )
return $ref;
return false;
}
Вот почему вас отправляют обратно на страницу настроек с параметрами действия по-прежнему там - потому что они присутствовали в $_SERVER['HTTP_REFERER']
.
Но вы также увидите, что вы можете переопределить это поведение, поместив скрытый ввод в свою форму вот так;
<input type="hidden" name="_wp_http_referer" value="<?php echo admin_url( 'options-general.php?page=wordpress-file-monitor-plus' ); ?>" />
Теперь options.php
всегда будет перенаправляться обратно на...
Http://example.com/wp-admin/options-general.php?page=wordpress-file-monitor-plus
...независимо от того, что было в строке запроса ранее.