Formulaire de contact sans plugin (Créer un compte)

  • WordPress :6.1
  • Statut : non résolu
2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Messages
  • #2453312
    Broussaille
    Participant
    Chevalier WordPress
    363 contributions

    Bonjour,

    Ma configuration WP actuelle :
    – Version de WordPress : 6.2
    – Version de PHP / MySQL : 7.4.33 / 5.5.5
    – Thème utilisé : Broussaille theme (slug : storefront-child)
    – Thème parent : Storefront (slug : storefront)
    – Thème URI : https://woocommerce.com/storefront/
    – Extensions activées :

    Advanced Editor Tools (5.9.0), Boxtal Connect (1.2.14), Classic Widgets (0.3), Complianz | GDPR/CCPA Cookie Consent (6.4.3), Enhanced Media Library PRO (2.8.9), everwpvisitcounter (1.2.3), Imagify (2.1.1), Infosite (6), Lightbox with PhotoSwipe (5.0.30), Local Google Fonts (0.20.0), Rank Math SEO (1.0.112), Rank Math SEO PRO (3.0.34), Responsive Menu (4.2.3), SecuPress Pro — WordPress Security (2.2.4), Widget Logic (5.10.4), WooCommerce (7.6.0), WooCommerce PayPal Payments (2.0.4), WooCommerce Stripe Gateway (7.3.0), WP Mail Logging (1.11.0), WP Mail SMTP (3.7.0), WP Rocket (3.13.1)
    – Adresse du site : https://broussaillestore.fr
    – Hébergeur : o2switch

     

    Problème(s) rencontré(s) : Bonjour à toutes et tous. Bon le sujet ne concerne pas directement une extension au sens « général », mais je ne savais pas où l’ouvrir (je ne me voyais pas discuter formulaire au coin du bar… ).

    Alors voilà, voulant limiter le nombre de plugins sur mon site, j’ai cherché le moyen de créer un formulaire sans passer par un plugin.

    J’ai trouvé des tas de trucs soit fort complexes, soit ne fonctionnant pas… Bref j’ai fini par trouver une « espèce de snippet » qui me donne un résultat correct… mais… mais… mais…

    J’ai dons créer deux formulaires : « contact » & « rétractation »

    Les formulaires sont fonctionnels, au sens où on peut les remplir sans problème, en cas d’erreur un message en rapport s’affiche correctement, l’envoi se fait bien et je reçois le mail, sauf qu’il manque des données : pas de sujet (pour le premier formulaire « contact »), pas de sujet, pas de nombre, pas de nom d’article (et pas de commentaire s’il y en a un) dans le formulaire « rétractation ».

    Je vous joins les fichiers.

    <?php
    /*
    Template Name: Contact
    */
    ?>

    <?php
    if(isset($_POST['submitted'])) {
    if(trim($_POST['contactName']) === '') {
    $nameError = 'Vous avez oublié de mettre votre prénom.';
    $hasError = true;
    } else {
    $name = trim($_POST['contactName']);
    }

    if(trim($_POST['email']) === '') {
    $emailError = 'Votre adresse courriel, ce serait bien....';
    $hasError = true;
    } else if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['email']))) {
    $emailError = 'Votre adresse de courriel est éronnée.';
    $hasError = true;
    } else {
    $email = trim($_POST['email']);
    }
    if(trim($_POST['subject']) === '') {
    $subjectError = 'Pas de sujet ?';
    $hasError = true;
    } else {
    if(function_exists('stripslashes')) {
    $subject = stripslashes(trim($_POST['subject']));
    } else {
    $subject = trim($_POST['subject']);
    }
    }

    if(trim($_POST['comments']) === '') {
    $commentError = 'Et votre message ?';
    $hasError = true;
    } else {
    if(function_exists('stripslashes')) {
    $comments = stripslashes(trim($_POST['comments']));
    } else {
    $comments = trim($_POST['comments']);
    }
    }

    if(!isset($hasError)) {
    $emailTo = get_option('tz_email');
    if (!isset($emailTo) || ($emailTo == '') ){
    $emailTo = get_option('admin_email');
    }
    $subject = 'Broussaille Store par'.$name;
    $body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
    $headers = 'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

    wp_mail($emailTo, $subject, $body, $headers);
    $emailSent = true;
    }

    } ?>
    <?php get_header(); ?>
    <div id="container">
    <div id="content">

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
    <h1 class="entry-title"><?php the_title(); ?></h1>
    <div class="entry-content">
    <?php if(isset($emailSent) && $emailSent == true) { ?>
    <div class="thanks">
    <p>Merci, votre message a été envoyé.</p>
    </div>
    <?php } else { ?>
    <?php the_content(); ?>
    <?php if(isset($hasError) || isset($captchaError)) { ?>
    <p class="error">Désolé, mais il y a une erreur !.<p>
    <?php } ?>

    <form action="<?php the_permalink(); ?>" id="contactForm" method="post">
    <ul class="contactform">
    <li>
    <label for="contactName">Prénom ou pseudo:</label>
    <input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" class="required requiredField" />
    <?php if($nameError != '') { ?>
    <span class="error"><?=$nameError;?></span>
    <?php } ?>
    </li>

    <li>
    <label for="email">Courriel :</label>
    <input type="email" name="email" id="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" class="required requiredField email" />
    <?php if($emailError != '') { ?>
    <span class="error"><?=$emailError;?></span>
    <?php } ?>
    </li>

    <li>
    <label for="subject">Sujet :</label>
    <input type="text" name="subject" id="subject" value="<?php if(isset($_POST['subject'])) echo $_POST['subject'];?>" class="required requiredField subject" />
    <?php if($subjectError != '') { ?>
    <span class="error"><?=$subjectError;?></span>
    <?php } ?>
    </li>

    <li><label for="commentsText">Message :</label>
    <textarea name="comments" id="commentsText" rows="20" cols="30" class="required requiredField"><?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?></textarea>
    <?php if($commentError != '') { ?>
    <span class="error"><?=$commentError;?></span>
    <?php } ?>
    </li>
    <li><label for="polc-7">Pour m'autoriser à stocker les données personnelles que vous envoyez afin que je puisse vous répondre, merci de cocher cette case :</label>
    <input type="checkbox" name="RGPD" id="polc-7" required>
    </li>
    <li>
    <p>(PS :<br>Je ne les revends pas.<br>Je ne spamme pas.<br>Mais je vous réponds...)</p>
    </li>
    <li>
    <input type="submit">Hop !</input>
    </li>
    </ul>
    <input type="hidden" name="submitted" id="submitted" value="true" />

    </form>
    <?php } ?>
    </div><!-- .entry-content -->
    </div><!-- .post -->

    <?php endwhile; endif; ?>
    </div><!-- #content -->
    </div><!-- #container -->

    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
    Contact

     

    <?php
    /*
    Template Name: Retract
    */
    ?>

    <?php
    if(isset($_POST['submitted'])) {
    if(trim($_POST['contactName']) === '') {
    $nameError = 'Vous avez oublié de mettre votre nom.';
    $hasError = true;
    } else {
    $name = trim($_POST['contactName']);
    }

    if(trim($_POST['email']) === '') {
    $emailError = 'Votre adresse courriel est nécessaire';
    $hasError = true;
    } else if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['email']))) {
    $emailError = 'Votre adresse de courriel est éronnée.';
    $hasError = true;
    } else {
    $email = trim($_POST['email']);
    }

    if(trim($_POST['number']) === '') {
    $numberError = 'Merci de noter le numéro de votre commande';
    $hasError = true;
    } else {
    if(function_exists('stripslashes')) {
    $number = stripslashes(trim($_POST['number']));
    } else {
    $number = trim($_POST['number']);
    }
    }

    if(trim($_POST['subject']) === '') {
    $subjectError = 'Merci de noter le nom de l\'article commandé';
    $hasError = true;
    } else {
    if(function_exists('stripslashes')) {
    $subject = stripslashes(trim($_POST['subject']));
    } else {
    $subject = trim($_POST['subject']);
    }
    }

    if(!isset($hasError)) {
    $emailTo = get_option('tz_email');
    if (!isset($emailTo) || ($emailTo == '') ){
    $emailTo = get_option('admin_email');
    }
    $subject = 'Broussaille Store par'.$name;
    $body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
    $headers = 'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

    wp_mail($emailTo, $subject, $body, $headers);
    $emailSent = true;
    }

    } ?>
    <?php get_header(); ?>
    <div id="container">
    <div id="content">

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
    <h1 class="entry-title"><?php the_title(); ?></h1>
    <div class="entry-content">
    <?php if(isset($emailSent) && $emailSent == true) { ?>
    <div class="thanks">
    <p>Merci, votre demande a été envoyée.</p>
    </div>
    <?php } else { ?>
    <?php the_content(); ?>
    <?php if(isset($hasError) || isset($captchaError)) { ?>
    <p class="error">Désolé, mais il y a une erreur !.<p>
    <?php } ?>

    <form action="<?php the_permalink(); ?>" id="contactForm" method="post">
    <ul class="contactform">
    <li>
    <p>Veuillez compléter et m'envoyer ce formulaire UNIQUEMENT si vous souhaitez vous rétracter pour votre commande..<br>À l'attention de Broussaille Store (Jean-Pierre Bourdet - 15 rue Diogène Maillart - 60000 - Beauvais - France)<br>
    Bonjour, je vous notifie par la présente ma rétraction portant sur la vente du bien dont les détails figurent ci-dessous :.<br>Vous avez quatorze jours à partir de la réception de votre commande pour faire valoir votre droit de rétractation.
    </p>
    </li>
    <li>
    <li>
    <label for="contactName">Nom avec lequel vous avez passé votre commande:</label>
    <input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" class="required requiredField" />
    <?php if($nameError != '') { ?>
    <span class="error"><?=$nameError;?></span>
    <?php } ?>
    </li>

    <li>
    <label for="email">Courriel avec lequel vous avez passé votre commande:</label>
    <input type="text" name="email" id="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" class="required requiredField email" />
    <?php if($emailError != '') { ?>
    <span class="error"><?=$emailError;?></span>
    <?php } ?>
    </li>

    <li><label for="number">Numéro de votre commande</label>
    <input type="number" name="number" id="n-command" value="<?php if(isset($_POST['number'])) echo $_POST['number'];?>" class="required requiredField number" />
    <?php if($numberError != '') { ?>
    <span class="error"><?=$numberError;?></span>
    <?php } ?>
    </li>

    <li>
    <label for="subject">Nom exact de l'article commandé :</label>
    <input type="text" name="subject" id="subject" value="<?php if(isset($_POST['subject'])) echo $_POST['subject'];?>" class="required requiredField subject" />
    <?php if($subjectError != '') { ?>
    <span class="error"><?=$subjectError;?></span>
    <?php } ?>
    </li>

    <li><label for="commentsText">Message (facultatif):</label>
    <textarea name="comments" id="commentsText" rows="10" cols="30" ></textarea>
    </li>
    <li><label for="polc-7">J'autorise ce site a stocker mes informations envoyées afin de pouvoir répondre à ma demande.</label>
    <input type="checkbox" name="RGPD" id="polc-7" required>
    </li>

    <li>
    <input type="submit">Hop !</input>
    </li>
    </ul>
    <input type="hidden" name="submitted" id="submitted" value="true" />

    </form>
    <?php } ?>
    </div><!-- .entry-content -->
    </div><!-- .post -->

    <?php endwhile; endif; ?>
    </div><!-- #content -->
    </div><!-- #container -->

    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
    Rétractation

     

    Bon, dans le « rétractation », le message est facultatif et du coup je n’ai pas mis le »if(trim($_POST[‘comments’]) ===  ») …etc », parce que dans le modèle avec message obligatoire (contact), il retourne un message en cas d’erreur (ce que je veux éviter puisque le message est facultatif), je pense que ça vient de la, au moins pour le souci de commentaire qui ne se fait pas, mais je ne sais pas comment le « recoder ».

    Pour le reste je nage en plein cambouis…

    Bon, ben voilà.

    Ah oui les pages avec les formulaires :

    Contact

    Rétractation

    Merci.

     

     

     

     

     

     

     

     

     

     

    #2453453
    Broussaille
    Participant
    Chevalier WordPress
    363 contributions

    Bon j’ai laissé tomber l’affaire, trop galère. Comme j’avais en même temps un souci avec WooCommerce, j’ai préféré ne pas en rajouter.
    Ceci-dit si quelqu’un a du temps à perdre ???? je suis quand même preneur de la solution, ou au moins de conseils.

    Allez, la bonne journée.

2 sujets de 1 à 2 (sur un total de 2)
  • Vous devez être connecté pour répondre à ce sujet.