Ce tutoriel montre la construction d'un plugin WordPress qui intègre Google Recaptcha dans le système de connexion WordPress. Le plugin utilise l'API HTTP pour envoyer une demande de poste à RecaptCha, validant les réponses CAPTCHA utilisateur.
Le développement du plugin implique la création d'une classe PHP avec des propriétés pour les clés RecaptCha, l'ajout du captcha au formulaire de connexion et la validation des réponses. Le code montre comment envoyer une demande de poste à https://www.google.com/recaptcha/api/verify
avec les paramètres nécessaires. Cela améliore la sécurité du site Web en différenciant les humains des robots, empêchant les tentatives d'accès non autorisées.
Un tutoriel précédent a exploré l'API WordPress HTTP. Ce tutoriel s'appuie sur cela, présentant la consommation d'API dans un plugin WordPress. Nous avons précédemment construit un widget WordPress de données et de données sociales à l'aide de l'API HTTP.
Vous trouverez ci-dessous une capture d'écran du formulaire de connexion WordPress avec le captcha intégré:
Développement du plugin
Avant de coder, enregistrez votre domaine sur recaptcha et obtenez vos clés API publiques et privées.
1. En-tête du plugin:
<?php /* Plugin Name: WP Login Form with reCAPTCHA Plugin URI: https://www.sitepoint.com Description: Adds Google's reCAPTCHA to WordPress Login Version: 1.0 Author: Agbonghama Collins Author URI: http://w3guy.com License: GPL2 */
2. Classe PHP:
Créez une classe PHP pour stocker les touches RecaptCha:
class reCAPTCHA_Login_Form { private $public_key, $private_key; public function __construct() { $this->public_key = '6Le6d-USAAAAAFuYXiezgJh6rDaQFPKFEi84yfMc'; $this->private_key = '6Le6d-USAAAAAKvV-30YdZbdl4DVmg_geKyUxF6b'; add_action( 'login_form', array( $this, 'captcha_display' ) ); add_action( 'wp_authenticate_user', array( $this, 'validate_captcha_field' ), 10, 2 ); } public function captcha_display() { ?> <🎜> <noscript> <iframe src="https://www.google.com/recaptcha/api/noscript?k=<?=$this->public_key?>" height="300" width="300" frameborder="0"></iframe><br><br> <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"> </noscript> <?php } public function validate_captcha_field($user, $password) { if ( ! isset( $_POST['recaptcha_response_field'] ) || empty( $_POST['recaptcha_response_field'] ) ) { return new WP_Error( 'empty_captcha', 'CAPTCHA cannot be empty' ); } if( isset( $_POST['recaptcha_response_field'] ) && $this->recaptcha_response() === 'false' ) { return new WP_Error( 'invalid_captcha', 'Incorrect CAPTCHA response' ); } return $user; } public function recaptcha_response() { $challenge = isset($_POST['recaptcha_challenge_field']) ? esc_attr($_POST['recaptcha_challenge_field']) : ''; $response = isset($_POST['recaptcha_response_field']) ? esc_attr($_POST['recaptcha_response_field']) : ''; $remote_ip = $_SERVER["REMOTE_ADDR"]; $post_body = array( 'privatekey' => $this->private_key, 'remoteip' => $remote_ip, 'challenge' => $challenge, 'response' => $response ); return $this->recaptcha_post_request( $post_body ); } public function recaptcha_post_request( $post_body ) { $args = array( 'body' => $post_body ); $request = wp_remote_post( 'https://www.google.com/recaptcha/api/verify', $args ); $response_body = wp_remote_retrieve_body( $request ); $answers = explode( "\n", $response_body ); $request_status = trim( $answers[0] ); return $request_status; } } new reCAPTCHA_Login_Form();
3. Instanciation du plugin:
Enfin, instanciez la classe:
new reCAPTCHA_Login_Form();
Cela complète le code du plugin. Téléchargez le plugin complet pour une utilisation ou une étude plus approfondie. Cela fait partie d'une série présentant l'utilisation de l'API WordPress HTTP dans les plugins.
(Section FAQs supprimée pour la concision, car elle ne nécessite pas de réécriture pour la pseudo-originalité. Le contenu est factuel et n'a pas besoin d'altération.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!