web-dev-qa-db-fra.com

Accéder à la variable GET nommée 'erreur'

Dans le cadre d'un projet, je dois créer un plugin wordpress qui s'intègre à Google pour l'authentification (il existe de bonnes raisons de développer un nouveau plugin au lieu d'utiliser un existant). Si l'utilisateur décide d'annuler la connexion pendant le processus d'autorisation, Google le redirigera vers mon site et définira une variable GET nommée "erreur".

Donc, j'ai remarqué que $_GET['error'] n'était jamais disponible et, après un peu de recherche, je suis tombé sur get_query_var() et des fonctions connexes - j'ai donc essayé cela, mais je ne pouvais toujours pas accéder à la variable 'error'. Après cela, j'ai sorti la valeur de $wp_query->query_vars et remarqué que la variable 'erreur' existe et est vide, que la variable soit définie ou non dans l'URL.

Ma question est donc la suivante: comment puis-je vérifier l’existence de la variable "error" (de préférence sans avoir à analyser l’URL - mais je la conserverai comme plan de sauvegarde). Je devrais probablement mentionner que je ne suis généralement pas un développeur de plugins wordpress, donc, si je suis un idiot et que je manque quelque chose de simple, faites-le-moi savoir!

/**** Modifier **/

Voici un peu de code de test qui simule ce que je tente de faire. Vous verrez que j'ai attaché des gestionnaires à l'action 'send_headers' - c'est là que j'ai vraiment besoin d'obtenir la variable. Le 'contenu_' est là pour la comparaison.

Le code: https://Gist.github.com/ryanlund/e644b10a9e50ae7b03e6 (c'est sur Gist parce que c'est assez long)

Le journal: https://Gist.github.com/ryanlund/e0d685545a09eff93a83

J'ai découpé la section showAll du journal uniquement pour les parties qui nous intéressent. J'ai exécuté le code avec la chaîne de requête suivante dans l'URL: ?test=A%20Test&error=An%20error

/**************************** Solution finale ******************* ************ /

Bonjour tout le monde, voici ma solution finale basée sur les idées que Tom m'a données (voir la réponse acceptée)

En gros, plutôt que d'essayer encore d'utiliser une variable qui est réservée (pas cool wordpress!), Je l'ai simplement renommée:

    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

Votre problème est que vous utilisez Termes réservés . error est un terme réservé, vous ne pouvez pas l'utiliser.

Pour contourner ce problème, , vous pouvez intercepter la demande tôt et faire une redirection en modifiant les paramètres de la requête au cours du processus. Par exemple, gérer un paramètre link get:

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

Puis manipulez la nouvelle 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 n'est peut-être pas le hook le plus approprié pour exécuter le code, probablement init à la place

3
Tom J Nowell