it-swarm.com.de

Zugriff auf die GET-Variable 'error'

Im Rahmen eines Projekts muss ich ein WordPress-Plugin erstellen, das sich zur Authentifizierung in Google integrieren lässt (Es gibt gute Gründe, ein neues Plugin zu entwickeln, anstatt ein vorhandenes zu verwenden). Wenn der Nutzer die Anmeldung während des Autorisierungsvorgangs abbricht, leitet Google zurück zu meiner Website und legt eine GET-Variable mit dem Namen "error" fest.

Also bemerkte ich, dass $_GET['error'] nie verfügbar war und stieß nach ein wenig Recherche auf get_query_var() und verwandte Funktionen - also habe ich es versucht, konnte aber immer noch nicht auf die Variable 'error' zugreifen. Danach habe ich den Wert von $wp_query->query_vars ausgegeben und festgestellt, dass die Variable 'error' existiert und leer ist, unabhängig davon, ob die Variable in der URL festgelegt ist.

Meine Frage ist also, wie ich die Existenz der 'error'-Variablen überprüfen kann (am besten ohne die URL analysieren zu müssen - aber das behalte ich als Backup-Plan). Ich sollte wahrscheinlich erwähnen, dass ich normalerweise kein WordPress-Plugin-Entwickler bin. Wenn ich also ein Idiot bin und etwas Einfaches vermisse, lass es mich bitte wissen!

/ **** Edit ** /

Hier ist ein kleiner Testcode, der simuliert, was ich versuche. Sie werden sehen, dass ich Handler an die Aktion 'send_headers' angehängt habe - hier muss ich die Variable wirklich abrufen. Der 'the_content' ist zum Vergleich da.

Der Code: https://Gist.github.com/ryanlund/e644b10a9e50ae7b03e6 (auf Gist, weil es ziemlich lang ist)

Das Protokoll: https://Gist.github.com/ryanlund/e0d685545a09eff93a83

Ich habe den Abschnitt showAll des Protokolls auf die Teile gekürzt, die uns interessieren. Ich habe den Code mit der folgenden Abfragezeichenfolge in der URL ausgeführt: ?test=A%20Test&error=An%20error

/**************************** Endgültige Lösung ******************* ************ /

Hallo allerseits, hier ist meine endgültige Lösung basierend auf den Ideen, die Tom mir gegeben hat (siehe die akzeptierte Antwort).

Anstatt immer noch zu versuchen, eine reservierte Variable zu verwenden (nicht cooles WordPress!), Habe ich sie einfach umbenannt:

    add_action('init',function() { 
        if(preg_match('/^\/test-page\//',$_SERVER['REQUEST_URI'])){
            if(isset($_GET['error'])){
                /*call it something unlikely to be used elsewhere*/
                $_GET['error_mpp']=$_GET['error']; 
            }

            global $wp; 
            $wp->add_query_var('test');
            $wp->add_query_var('error_mpp');
        }
    });
1
Ryan Lund

Ihr Problem ist, dass Sie reservierte Begriffe verwenden. error ist ein reservierter Begriff, den Sie nicht verwenden können.

Um dies zu umgehen, können Sie die Anforderung frühzeitig abfangen und eine Umleitung durchführen, indem Sie die Abfrageparameter im Prozess ändern. Beispiel für die Behandlung eines get-Parameters für link:

add_action( 'wp' , 'reserved_term_intercept' );

function reserved_term_intercept(){
    global $wp_query;
    if( $wp_query->queried_object_id == 72 && isset( $_GET["link"] ) ){

        wp_redirect( get_permalink( 72 ) . "?newlink=" . urlencode( $_GET["link"] ) . "&nonce=" . wp_create_nonce( 'nonce-name' ) );
        exit;
    }
}

Behandle dann die neue Variable:

add_action( 'wp_head' , 'reserved_term_handling' );

function reserved_term_handling(){
    if( wp_verify_nonce( $_GET["nonce"], 'nonce-name' ) == TRUE && isset( $_GET["newlink" ) ){
        printf( '<a href="%s">Hello World!</a>', esc_url( urldecode( $_GET["newlink"] ) ) );
    }
}

wp_head ist möglicherweise nicht der am besten geeignete Hook, um den Code auszuführen, wahrscheinlich init

3
Tom J Nowell