« Shortcode » qui affiche et traite un formulaire

Les « shortcodes », ces caractères entourés de crochets carrés que l'on retrouve dans le texte des pages ou des articles sur un site WordPress, peuvent effectuer une foule de traitements, dont l'affichage et le traitement de formulaires.

Si vous souhaitez ajouter des fonctionnalités à votre site WordPress, dont des formulaires Web répondant précisément à votre besoin, cet article s'adresse à vous !

▼Publicité

Affichage du formulaire

Les formulaires Web peuvent être utiles dans une foule de circonstance. Il existe bien sûr des extensions WordPress toutes faites qui affichent des formulaires. Mais si votre base de données WordPress contient des tables personnalisées, un formulaire maison sera plus adapté pour interagir avec les données de ces tables. C'est là que la programmation d'un « shortcode » qui affiche et traite un formulaire sera utile.

Si l'affichage d'un formulaire semble simple à prime abord, le tout peut devenir plutôt complexe quand on doit internationaliser le formulaire. Rappelez-vous de plus que la fonction de rappel associée au « shortcode » ne doit rien afficher à l'écran.

Voici une technique pour vous faciliter la tâche.

Tout ce code doit être écrit dans la fonction de rappel associée au « shortcode ». Cette fonction sera généralement déclarée dans le fichier functions.php de votre thème enfant, ou mieux, dans une extension :

  • Commencez par temporiser la sortie. Cette tâche est optionnelle mais elle assure qu'en cas où la fonction de rappel du « shortcodes » ferait un echo, rien ne sera envoyé à l'écran avant que WordPress en soit prêt.

    Ex :

    WordPress (PHP)

    ob_start();

  • Déterminez sur quelle page le formulaire sera traité et placez son URL dans une variable. Cette variable constituera la valeur de l'attribut action de la balise <form>.

    Les formulaires affichés dans le tableau de bord devront être traités dans admin.php. Son URL sera retrouvé à l'aide de la fonction WordPress admin_url(). Mais puisque dans les faits, le traitement sera codé dans un fichier du thème enfant ou de l'extension, on ajoutera un paramètre à l'URL afin de préciser le slug de la page du tableau de bord qui traitera le formulaire. Un slug est une chaîne de caractères qui permet d'identifier une page de façon unique. Ce slug est déterminé lors de l'ajout de la page dans le menu du tableau de bord.

    Ex :

    WordPress (PHP)

    $url_action = admin_url() . admin.php?page=annie_ajouter_suivi

    Dans le cas d'un formulaire affiché sur le site Web, le traitement peut être effectué sur la page de votre choix. Souvent, on utilisera la même page que celle ayant affiché le formulaire mais ceci n'est pas une obligation.

    L'URL de la page ne doit jamais être codé en dur. La fonction WordPress get_permallink() permet de retrouver l'URL exact de la page actuellement affichée, incluant les paramètres de l'URL. Et contrairement à l'utilisation de $_SERVER['PHP_SELF'], get_permalink() ne pose pas de risque d'injection SQL ou d'attaque XSS.

    Ex :

    WordPress (PHP)

    $url_action = get_permalink();

  • Stockez dans des variables chacune des chaînes internationalisées.

    Ex :

    WordPress (PHP)

    $titre = __( 'Titre', 'mon-domaine-de-localisation' );

  • Placez le code du formulaire dans une variable. Pour faciliter votre travail, utilisez les guillemets pour entourer l'ensemble du code. Ceci vous permettra d'utiliser directement les variables internationalisées. Le tout sera plus facile à lire et à déboguer si vous prenez soin d'ajouter des sauts de ligne aux endroits appropriés.

    Ex :

    WordPress (PHP)

    $formulaire = "

        <form method='post' action='$url_action'>

            <p>

                <label class='aligne' for='titre'>* $titre : </label>

                <input type='text' id='titre' name='titre' required maxlength='50' />

            </p>

            ...

        </form>

    ";

  • Faites un return de cette variable suivie de la temporisation de sortie.

    Ex :

    WordPress (PHP)

    $output = ob_get_clean();

    return $formulaire . $output;

Traitement du formulaire

Si  l'attribut action du formulaire renvoie vers la même page que celle où le formulaire est affiché, on pourra effectuer le traitement dans la fonction de rappel qui affiche le formulaire.

Ex :

WordPress (PHP)

$message = "";   // cette variable contiendra l'état de l'opération si le formulaire a été traité

 

if ( isset( $_POST['soumettre'] ) ) {   // si la page a reçu des données du formulaire 

    // traitement du formulaire

    ...

 

    // résultat de l'opération

    if ( ... ) {

        $message = "<div class='messageerreur'>...</div>";   

    } else {

        $message = "<div class='messageinformation'>...</div>";

    }

}

 

// génération du formulaire (ici, on a choisi de toujours afficher le formulaire, même après le traitement)

...

$formulaire = "...";

 

// on retourne le message (qui sera à blanc si le formulaire n'a pas été traité) suivi du formulaire

$output = ob_get_clean();

return $message . $formulaire . $output;

Un petit dessin avec ça ?

Le schéma suivant illustre ce qui se passe lorsqu'un « shortcode » doit afficher puis traiter un formulaire.

Illustration d'un shortcode affichant un formulaire

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories