ПОЛУЧИТЬ параметры, которые мешают настройкам моего плагина


Мой плагин полностью настроен с помощью 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

Author: Scott, 2011-06-17

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

...независимо от того, что было в строке запроса ранее.

 5
Author: TheDeadMedic, 2011-06-17 15:07:32