Antispam Bee et le champ « comment »

Antispam Bee est un plugin WordPress gratuit qui, comme son nom l’indique, aide à réduire le phénomène du spam sur un site tournant sous WordPress. Je l’utilise sur ce site ainsi que tous ceux que je développe et jusque là tout se passe bien, les spams ne sont pas envahissants et ils sont plutôt bien géré par cette petite abeille.

Le problème

Cependant j’ai noté, sur un site client, un soucis de soumission de commentaires. En effet, pas moyen d’envoyer le moindre commentaire car le champ « commentaire » est systématiquement détecté comme étant vide par le plugin jQuery Validate qui me sert dans un premier temps à tester le remplissage des champs requis du coté client. De fait l’utilisateur ne peut pas valider son commentaire et se voit débouté quoi qu’il fasse. Argh ! Un bug ! Pourtant tout fonctionnait bien en local…sans le plugin !

En creusant un petit peu on s’aperçoit que le champ nommé « comment » à l’origine dans le formulaire de commentaires de WordPress a été renommé en quelque chose comme « f0b05-comment ».

En creusant un tout petit peu plus il s’avère que c’est bien Antispam Bee qui est en cause et pas moyen de s’affranchir de ce renommage via les options du plugin. Damned !

La solution

J’ai donc été regarder dans le code du plugin et effectivement ont peu voir aux alentours de la ligne 199 du fichier « antispam_bee.php » une action qui s’occupe de renommer le champ « comment » à l’aide d’une chaine et du suffixe « -comment » :

add_action(
	'template_redirect',
	array(
		__CLASS__,
		'prepare_comment_field'
	)
);

Ce qui nous conduit tout droit à la méthode « prepare_comment_field » :

public static function prepare_comment_field()
{
    /* Nur Frontend */
    if ( is_feed() or is_trackback() or is_robots() or self::_is_mobile() ) {
        return;
    }

    /* Nur Beiträge */
    if ( !is_singular() && !self::get_option('always_allowed') ) {
        return;
    }

    /* Fire! */
    ob_start(
        array(
            'Antispam_Bee',
            'replace_comment_field'
        )
    );
}

Qui elle-même nous renvoi à la méthode « replace_comment_field » où le champ « comment » est clairement remplacé et renommé par soucis de sécurité :

public static function replace_comment_field($data)
{
    /* Leer? */
    if ( empty($data) ) {
        return;
    }

    /* Find the comment textarea */
    if ( ! preg_match('#<textarea.+?name=["\']comment["\']#s', $data) ) {
        return $data;
    }

    /* Convert */
    return preg_replace(
        '#<textarea(.+?)name=["\']comment["\'](.+?)</textarea>#s',
        '<textarea$1name="' .self::$_secret. '"$2</textarea><textarea name="comment" style="display:none" rows="1" cols="1"></textarea>',
        (string) $data,
        1
    );
}

La solution est alors simple à mettre en place, il faut « déhooker » l’action « template_redirect » dans le fichier « functions.php » par exemple après l’initialisation du thème via l’action « after_setup_theme« .

A noter que la classe « Antispam_Bee » est statique donc dans le cas présent nous passons le nom de la classe et non pas une variable d’instance comme précisé dans la documentation de « remove_action« …

add_action( 'after_setup_theme' , 'my_function_after_setup_theme' );
function my_function_after_setup_theme() {
    if ( class_exists( 'Antispam_Bee', false ) ) {
        remove_action( 'template_redirect', array( 'Antispam_Bee', 'prepare_comment_field' ) );
    }
}

Voilà, rien de grave au final. Merci la petite abeille pour ce bon travail quotidien…

A lire également

Un commentaire pour “Antispam Bee et le champ « comment »

Laisser un commentaire

Champs requis : Nom, Email, Captcha & Commentaire. Votre adresse ne sera pas publiée

Etes-vous humain ? Merci de cliquer sur l'icône "parapluie"

31st’udio

Besoin d'un site web ? 31st'udio crée pour vous des sites web 100% administrables et polyvalents, en savoir plus...

Catégories