web-dev-qa-db-fra.com

Un formulaire dans un widget personnalisé

J'essaie de créer un widget personnalisé de formulaire de contact. Je voudrais donc afficher un formulaire de contact avec un widget WordPress et envoyer un message.

Aucun problème pour afficher le formulaire avec mon widget, mais lorsque je clique sur le bouton d'envoi, je ne peux pas récupérer mes données. Le isset ($ _ POST ['my_data']) ne fonctionne pas.

Quand je mets mon code de formulaire hors du widget dans un simple fichier php, tout va bien, le isset ($ _ POST ['my_data']) fonctionne bien.

Je fais le test avec ce simple extrait:

<?php

//$form_action = '';
$form_action = get_bloginfo('url').'#contactBox';

if (isset($_POST['send'])) {
echo "The isset 'send' work well 
";
$name = (isset($_POST['name'])) ? $_POST['name'] : '';
echo "name = ".$name." ";
} else {
echo "There is something WRONG !!!";
}

// Display the form
echo '<form method="post" action="'.$form_action.'">'."\n";
echo '  <p>'."\n";
echo '  <label for="name">Name</label>'."\n";
echo '  <input type="text" name="name" value="'.$name.'" />'."\n";
echo '  </p>'."\n";
echo '  <div style="text-align:center;"><input class="submit" type="submit" name="send" value="Send" /></div>'."\n";
echo '</form>'."\n";

?>

Est-il possible d'implémenter un formulaire avec un widget personnalisé WordPress?

Voici le code complet de mon widget personnalisé avec le formulaire de contact: www.pixenjoy.com/documents/widget.Zip

J'ajoute deux messages d'écho dans ce code pour tester la récupération de mon formulaire de données (if (isset ...)> ligne 145 "ok" ligne 190 "ko"

1
Gilles Vauvarin

Je me souviens d'un sujet de support que j'ai lu à propos d'un problème lorsque vous utilisez le nom name pour l'un de vos champs de publication, essayez de préfixer vos noms d'entrée.

<input type="text" name="my-name"  ...

Et voir si ça aide ..

Suivi n ° 1

J'ai effectué un test simple à l'intérieur d'un widget.

if( isset( $_POST ) ) {
    print'<pre>';print_r( $_POST );print'</pre>';
}
echo '<form action="'.home_url().'" method="post"><input type="text" name="thename" /><input type="submit" name="submit" /></form>';

Je vois très bien les variables de publication qui ont été définies dans le formulaire.

Suivi n ° 2

Si vous essayez le code de test que j'ai posté ci-dessus, ça marche? Si tel est le cas, j’imagine qu’un problème lié à l’action de formulaire du nom de l’entrée de soumission, essayez de coder en dur l’action ou de modifier l’entrée de soumission en fonction de mon test et de voir si l’une ou l’autre modification corrige le problème.

Si aucune aide, je suggérerais ensuite de désactiver les plug-ins pour éliminer les interférences (un plug-in pourrait déstabiliser des variables $_POST à un moment donné (juste une supposition sauvage, mais une possibilité quand même).

1
t31os

Il semble que le problème est avec "l'action de la forme". J'ai précédemment implémenté un formulaire à l'intérieur du widget. (J'utilise la classe WP_Widget )

J'ai laissé l'action vide .. ce qui signifie que les données $ _POST sont soumises à la fonction de widget. On peut écrire une logique de traitement de formulaire dans la fonction de widget.

      <?php
       function widget($args, $instance){
        Form Processing Logic here  
         if isset ($_POST)  {  do   }
          //Display complete form here like this

          ?>
         <form method="post" id="form_id" action = "" >

     Email:<input name="email" id="email" class="a" value=" email"/>
          <br /><br />
             <input type="submit" value="subscribe"  class="b"/>  
      </form>
         </div>

      <?php
              }
                ?>
0
Ankit