Un accès aux fichiers du site, pour modifier wp-config.php et ajouter un fichier dans wp-content : une extension indispensable se dépose sous forme de fichier, elle ne s'installe pas depuis le tableau de bord.
Refuser dans WordPress les inscriptions d'adresses mortes
Ajoutez à WordPress une extension indispensable qui vérifie chaque nouvelle inscription avec PricklyMails et refuse les adresses qui ne reçoivent pas d'emails.
Pas besoin de connecteur : à chaque inscription, WordPress appelle l'API PricklyMails depuis le filtre registration_errors, et une adresse qui ne peut pas recevoir d'emails est refusée avant que le compte n'existe.
Vérifier chaque inscription en quatre étapes
Avant de commencer
- Dans PricklyMails
Créer une clé API dans PricklyMails
- Dans le tableau de bord, ouvrez Clés API et cliquez sur Nouvelle clé.
- À l'étape Environnement, choisissez d'abord Test : la clé commence par
pm_test_, répond par des résultats prédéfinis, ne facture rien et ne contacte aucun serveur de messagerie. - Copiez la clé dès qu'elle s'affiche : elle n'est montrée qu'une fois.
Astuce
L'offre Free ne compte qu'une clé : une fois que tout fonctionne, révoquez la clé de test, puis créez-en une en Production.
- Dans WordPress
Ranger la clé et ajouter l'extension dans WordPress
La clé va dans
wp-config.php, sous forme de constante, et le code dans une extension indispensable (must-use plugin), que WordPress exécute sans activation et qu'on ne peut pas désactiver depuis le tableau de bord.- Ouvrez
wp-config.php, à la racine des fichiers de WordPress. - Juste au-dessus de la ligne « C'est tout, ne touchez pas à ce qui suit ! » (
That's all, stop editing!dans un fichier en anglais), ajoutezdefine( 'PRICKLYMAILS_KEY', 'pm_test_votre_cle' );, avec votre clé de test pour valeur. - Dans
wp-content, créez un dossiermu-plugins, s'il n'existe pas déjà. - Enregistrez-y le code ci-dessous sous le nom
pricklymails-signup-check.php.
Le code demande à PricklyMails de répondre en quelques secondes (
Prefer: wait) et cesse d'attendre peu après, pour qu'une inscription ne reste jamais suspendue à la réponse. Il ne refuse l'inscription que si la recommandation estremove, et la laisse passer sinon : adresse risquée, pas de réponse à temps, erreur.Comment l'API répond en un seul appelwp-content/mu-plugins/pricklymails-signup-check.php<?php /** * Plugin Name: PricklyMails signup check */ defined( 'ABSPATH' ) || exit; function pricklymails_refusal() { return __( 'This email address cannot receive mail.', 'pricklymails' ) . ' ' . __( 'Check it for a typo, or use another one.', 'pricklymails' ); } // The person waits at the form: wait 4 for the answer, give up at 5. function pricklymails_recommendation( $email ) { $response = wp_remote_post( 'https://api.pricklymails.com/api/verify', array( 'timeout' => 5, 'headers' => array( 'Authorization' => 'Bearer ' . PRICKLYMAILS_KEY, 'Content-Type' => 'application/json', 'Prefer' => 'wait=4', ), 'body' => wp_json_encode( array( 'email' => $email ) ), ) ); if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { return null; } $result = json_decode( wp_remote_retrieve_body( $response ), true ); return $result['verification']['recommendation'] ?? null; } function pricklymails_check_signup( $errors, $user_login, $user_email ) { // A signup WordPress already refused costs no verification. if ( $errors->has_errors() || ! defined( 'PRICKLYMAILS_KEY' ) ) { return $errors; } if ( 'remove' === pricklymails_recommendation( $user_email ) ) { $errors->add( 'user_email', pricklymails_refusal() ); } return $errors; } add_filter( 'registration_errors', 'pricklymails_check_signup', 10, 3 );Attention
Si
wp-config.phpmetWP_HTTP_BLOCK_EXTERNALàtrue, WordPress n'envoie de requêtes qu'à votre propre site et aux hôtes listés dansWP_ACCESSIBLE_HOSTS: ajoutez-yapi.pricklymails.com, sinon le code n'atteint jamais PricklyMails et laisse passer toutes les inscriptions.À noter
Laissez le fichier directement dans
mu-plugins: WordPress ne charge pas les fichiers de ses sous-dossiers.SourceAide officielle de WordPress- registration_errors (nouvel onglet)developer.wordpress.org
- Must-Use Plugins (nouvel onglet)developer.wordpress.org
- Editing wp-config.php (nouvel onglet)developer.wordpress.org
- Header Requirements (nouvel onglet)developer.wordpress.org
- wp_remote_post() (nouvel onglet)developer.wordpress.org
- WP_Http::request() (nouvel onglet)developer.wordpress.org
- wp_remote_retrieve_response_code() (nouvel onglet)developer.wordpress.org
- WP_Error::add() (nouvel onglet)developer.wordpress.org
- Ouvrez
- Dans WordPress
Ouvrir les inscriptions dans WordPress
Une extension indispensable ne s'active pas : WordPress l'exécute dès que le fichier est en place. Reste à permettre aux visiteurs de créer un compte, et à vérifier que WordPress voit l'extension.
- Dans le tableau de bord, ouvrez Réglages puis
Général . - Sous Inscription, cochez Tout le monde peut s'inscrire.
- Cliquez sur Enregistrer les modifications.
- Ouvrez Extensions et cliquez sur Indispensable, au-dessus de la liste.
- Vérifiez que PricklyMails signup check y figure.
Astuce
Le formulaire d'inscription se trouve à l'adresse
wp-login.php?action=registerde votre site : c'est là que se fait l'essai de l'étape suivante.À noter
Votre administration est en anglais ? Ces menus s'y appellent Settings puis
General , Membership, Anyone can register, Save Changes, Plugins et Must-Use, comme dans la documentation citée, rédigée en anglais.SourceAide officielle de WordPress- Settings General screen (nouvel onglet)wordpress.org
- Must-Use Plugins (nouvel onglet)developer.wordpress.org
- Header Requirements (nouvel onglet)developer.wordpress.org
- wp_registration_url() (nouvel onglet)developer.wordpress.org
- Dans le tableau de bord, ouvrez Réglages puis
- Dans WordPress
Essayer avec la clé de test
- Inscrivez-vous avec une adresse qui commence par
invalid, commeinvalid@example.com: la clé de test répondremove, et l'inscription est refusée. - Inscrivez-vous avec une autre adresse, comme
valid@example.com: le compte est créé. - Là où vous avez rangé la clé, remplacez-la par une clé créée en Production, qui commence par
pm_live_: dès lors, chaque inscription est vérifiée pour de vrai et facturée comme toute vérification.
- Inscrivez-vous avec une adresse qui commence par
Ce que devient chaque inscription
Le code lit la recommandation que l'API donne pour l'adresse, la même que dans le rapport d'une liste.
- À retirer
Refusée : l'adresse n'existe pas, son domaine ne peut pas recevoir d'emails, ou elle est jetable.
WordPress ne crée pas le compte et affiche de nouveau le formulaire d'inscription, avec le message dans un avis d'erreur au-dessus. Le message s'affiche tel que le code l'écrit, en anglais : remplacez ses deux phrases par les vôtres si votre site est en français. Une extension qui modifie par le filtre
login_errorsles avis du formulaire de connexion modifie aussi celui-ci, puisque le formulaire d'inscription partage cette page.- À revoir
Acceptée : domaine qui accepte toutes les adresses, adresse générique comme contact@, ou serveur qui n'a pas répondu. L'adresse peut fonctionner.
- À envoyer
Acceptée : l'adresse est valide, ou hébergée chez un grand fournisseur qui accepte toutes les adresses.
- Pas de réponse à temps
- WordPress attend la fin du filtre avant de créer le compte, sans délai maximal de sa part, pendant que la personne attend devant le formulaire. Le code demande à PricklyMails de répondre en 4 secondes, cesse d'attendre au bout de 5, le
timeoutde sa requête, puis laisse passer l'inscription.
- register_new_user() (nouvel onglet)developer.wordpress.org
- login_header() (nouvel onglet)developer.wordpress.org
- login_errors (nouvel onglet)developer.wordpress.org
- WP_Http::request() (nouvel onglet)developer.wordpress.org
Questions fréquentes
Le code vérifie-t-il les inscriptions faites par WooCommerce ?
Pas tel quel : WordPress n'exécute registration_errors que pour son propre formulaire d'inscription, et les formulaires de WooCommerce passent par leur propre filtre, woocommerce_registration_errors, que son bloc Checkout prend aussi en charge. Pour vérifier aussi ces inscriptions, ajoutez cette ligne à la fin du fichier : add_filter( 'woocommerce_registration_errors', 'pricklymails_check_signup', 10, 3 );.
- wc_create_new_customer() (nouvel onglet)woocommerce.github.io
- Getting to Know Woo: Exploring Server-Side Extensibility with Hooks (nouvel onglet)developer.woocommerce.com
- register_new_user() (nouvel onglet)developer.wordpress.org
Le code fonctionne-t-il sur un réseau multisite ?
Avec un filtre de plus. Sur un réseau, les inscriptions passent par wp-signup.php, qui les valide avec le filtre wpmu_validate_user_signup à la place, et le fichier de mu-plugins s'exécute sur tous les sites. Accrochez à ce filtre une fonction qui passe les clés errors, user_name et user_email du tableau à pricklymails_check_signup, puis renvoie le tableau : le message s'affiche sous le champ de l'adresse, puisque le code le range sous user_email. Pour ouvrir les inscriptions, allez dans Admin du réseau puis
- wpmu_validate_user_signup (nouvel onglet)developer.wordpress.org
- show_user_form() (nouvel onglet)developer.wordpress.org
- Must-Use Plugins (nouvel onglet)developer.wordpress.org
- Network Admin Settings Screen (nouvel onglet)developer.wordpress.org
Une inscription que WordPress refuse de lui-même coûte-t-elle une vérification ?
Non. WordPress vérifie l'identifiant et l'adresse avant d'exécuter le filtre, et le code s'arrête sans appeler PricklyMails quand l'un de ces contrôles a échoué : adresse vide ou mal formée, adresse ou identifiant déjà enregistrés.
- register_new_user() (nouvel onglet)developer.wordpress.org
Existe-t-il une extension PricklyMails pour WordPress ?
Non, et il n'y a rien à installer : le code ci-dessus appelle l'API PricklyMails avec votre clé.
Ces marques appartiennent à leurs propriétaires respectifs. Les citer n'implique aucun partenariat.
Vérifiez votre liste avant votre prochain envoi.
1 000 jetons offerts à l'inscription, sans carte bancaire. Ensuite, vous ne payez que les réponses.