it-swarm.com.de

GET-Parameter stören meine Plugin-Einstellungen

Ich habe mein Plugin vollständig über die Einstellungs-API eingerichtet und arbeite. Ich habe jedoch zwei manuelle Funktionen in meinem Plugin, die vom Administrator unter den folgenden URLs ausgeführt werden können

<?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

Ich verwende den Hook admin_init, um nach diesen GET-Parametern Ausschau zu halten und diese Funktionen auszuführen.

Die Funktionen laufen einwandfrei und der Benutzer ist wieder auf meiner Plugin-Einstellungsseite, aber die GET-Parameter sind noch in der URL. Kein großes Problem, aber wenn der Benutzer dann fortfährt und die Einstellungen speichert, werden diese GET-Parameter erneut gesendet und führen diese Funktionen erneut aus.

Warum sendet die Einstellungs-API diese Parameter, wenn das Einstellungsformular gesendet wird? Die Aktion des Formulars besteht darin, an options.php zu senden.

Der einzige Weg, um mein Problem zu umgehen, besteht darin, nach dem Ausführen des Codes dieser manuellen Funktionen in admin_init eine Umleitung zur Einstellungsseite ohne die GET-Parameter auszuführen. Wenn ich dies jedoch tue, gehen meine Administratorbenachrichtigungen verloren versuchen, dem Benutzer zu zeigen.

Wie auch immer, ich habe Vorschläge, wie ich dieses Problem umgehen kann. Vielleicht gibt es Ihrer Meinung nach eine bessere Möglichkeit, diese manuellen Funktionen auszuführen?

BEARBEITEN: vollständiger Einstellungscode: http://Pastebin.com/Gk5RF5Lc

1
Brady

Warum sendet die Einstellungs-API diese Parameter, wenn das Einstellungsformular gesendet wird?

Ehrlich gesagt nicht. Wie Sie bereits erwähnt haben, geht Ihr Formular einfach per POST an options.php, der wiederum die Anforderung bearbeitet, die Datenbank aktualisiert und dann zurück zum Referer umleitet.

Wie der Referer abgerufen wird, hängt von der Funktion wp_get_referer() ab.

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;
}

Aus diesem Grund werden Sie mit den Aktionsparametern, die sich noch in $_SERVER['HTTP_REFERER'] befanden, zu Ihrer Optionsseite zurückgeschickt.

Sie werden jedoch auch feststellen, dass Sie dieses Verhalten außer Kraft setzen können, indem Sie eine ausgeblendete Eingabe in Ihr Formular einfügen.

<input type="hidden" name="_wp_http_referer" value="<?php echo admin_url( 'options-general.php?page=wordpress-file-monitor-plus' ); ?>" />

Jetzt leitet options.php immer zurück zu ...

http://example.com/wp-admin/options-general.php?page=wordpress-file-monitor-plus

... unabhängig davon, was zuvor in der Abfragezeichenfolge enthalten war.

5
TheDeadMedic