web-dev-qa-db-fra.com

Rejeter les commentaires basés sur le courrier électronique de l'auteur

Je sais que je ne peux pas garantir que les e-mails sont valides sans inscription, mais j'ai remarqué qu'un utilisateur problématique qui souhaitait troll utilisait des adresses e-mail @example.com.

Comment puis-je maintenir une liste noire de ces domaines pour les auteurs de commentaires? Plus précisément, comment puis-je rejeter les commentaires immédiatement si un tel domaine est utilisé, en avertissant l'utilisateur en tant que tel?

Une wp_die('you must use a real email'); fera probablement l'affaire, mais quel filtre/quand faut-il vérifier?

1
Tom J Nowell

Voici une suggestion pour un filtre:

/**
 * Filters a comment's approval status before it is set.
 *
 * @since 2.1.0
 * @since 4.9.0 Returning a WP_Error value from the filter will shortcircuit comment insertion and
 *              allow skipping further processing.
 *
 * @param bool|string|WP_Error $approved    The approval status. Accepts 1, 0, 'spam' or WP_Error.
 * @param array                $commentdata Comment data.
 */
$approved = apply_filters( 'pre_comment_approved', $approved, $commentdata );

où nous pouvons par exemple essayez l’analyseur de domaine de messagerie de Gabriel Livan :

add_filter( 'pre_comment_approved', function( $approved, $commentdata ) {
    $domain = substr( strrchr( $commentdata['comment_author_email'], '@' ), 1 );
    $banned_domains = [
        'example.com',
        'example.org',
        'example.net',
        'localhost'
    ];
    if ( in_array( $domain, $banned_domains ) ) {
        wp_die( __( 'Please use a real email!' ) );
        //return new WP_Error( 'comment_real_email', __( 'Please use a real email!' ) );
    }
    return $approved;
}, 10, 2 );

$banned_domains est la liste des domaines de messagerie que nous voulons arrêter avant de les enregistrer dans notre base de données.

Un autre qui se déclenche plus tôt est:

/**
 * Filters a comment's data before it is sanitized and inserted into the database.
 *
 * @since 1.5.0
 *
 * @param array $commentdata Comment data.
 */
$commentdata = apply_filters( 'preprocess_comment', $commentdata );
2
birgire