web-dev-qa-db-fra.com

créer un formulaire pour wp_remote_post

j'utilise le code du codex wordpress: (c'est la version générique, mon code fonctionne bien)

$response = wp_remote_post( $url, array(
    'method' => 'POST',
    'timeout' => 45,
    'redirection' => 5,
    'httpversion' => '1.0',
    'blocking' => true,
    'headers' => array(),
    'body' => array( 'name' => 'bob', 'email' => '[email protected]' ),
    'cookies' => array()
    )
);

if ( is_wp_error( $response ) ) {
   $error_message = $response->get_error_message();
   echo "Something went wrong: $error_message";
} else {
   echo 'Response:<pre>';
   print_r( $response );
   echo '</pre>';
}

J'essaie de comprendre comment créer un formulaire dans lequel les utilisateurs peuvent saisir leur nom et leur adresse électronique. Ils nous soumettront ensuite pour être ajoutés à un bulletin d'information.

Donc, fondamentalement, je veux que les entrées du corps soient dynamiques

Je pensais à une forme comme celle-ci:

<form name="getUserInfo" action="NOT SURE WHAT GOES HERE" method="post">
  <input type="text" name="name" />
  <input type="email" name="email" />
  <input type="submit" name="submit" value="submit"/>
</form>

mais je ne sais pas comment envoyer cela au code

je crois que c'est le long de cette méthode où je change cette ligne:

'body' => array( 'name' => 'bob', 'email' => '[email protected]' ),

à

'body' => array( 'name' => '$namefromform', 'email' => '$emailfromform' ),

je sais qu'il me manque quelque chose mais je ne suis pas sûr.

De manière générale, j'aimerais que cela fonctionne en tant que widget pour que mon inscription à la newsletter se trouve en bas de page du site.

Si quelqu'un se demande pourquoi j'ai besoin d'une API pour cela, c'est parce que l'entreprise que j'aide à créer le site Web envoie tous ses contacts à un système de gestion de contacts tiers plus important.

1
rudtek

J'ai compris ce qui me manquait. C’est peut-être simple pour certains, mais cela vaut la peine de le poster si quelqu'un d'autre a une question similaire. J'ai défini les informations de publication du formulaire sur des variables, puis les ai affectées dans wp_remote_post.

J'ai d'abord refait mon formulaire pour y ajouter des noms spécifiques:

<form name="getUserInfo" action="' . esc_url( $_SERVER['REQUEST_URI'] ) . '" method="post">
  <input type="text" name="name" />
  <input type="email" name="email" />
  <input type="submit" name="submit" value="submit"/>
</form>

puis j'ai affecté des variables en fonction des données de formulaire.

    $name    = sanitize_text_field( $_POST["rt-name"] );
    $email   = sanitize_email( $_POST["rt-email"] );

Ils ont été ajoutés à la place de la ligne du corps dans ma question initiale:

'body' => array( 'name' => '$name', 'email' => '$email' ),

Puis j'ai ajouté une déclaration if/then autour de mon wp_remote_post:

 if ( isset( $_POST['rt-submitted'] ) ) {  wp_remote_post here }

de sorte qu'il ne s'exécute que si les informations de post du formulaire sont présentes.

marche parfaitement.

le crédit est en partie attribué à ce post: shortcode ne fonctionne pas

1
rudtek

Vous pouvez faire en sorte que l'action de formulaire soit l'URL de la page en cours. Lorsque l'utilisateur soumet le formulaire, la page est rechargée avec les paramètres POST. Ensuite, dans le code de votre widget, vérifiez si ces paramètres existent. Si tel est le cas, vous les vérifiez et les traitez ensuite avec votre wp_remote_post.

Personnellement, j'utilise Gravity Forms pour ce genre de choses. Je crée le formulaire dans Gravity, puis j'ajoute du code au hook gform_after_submission pour traiter l'entrée du formulaire. C'est une option facile car elle prend en charge le reste de la fonctionnalité du formulaire (si vous pouvez vous permettre la licence).

1
Andreyu