web-dev-qa-db-fra.com

Comment puis-je supprimer automatiquement les commentaires contenant des signes chinois/russes?

De temps en temps, je reçois des commentaires comme ceux-ci:

天 有 眼 啊, 的 绝伦子

Ils sont absolument inutiles pour moi. Je ne sais même pas si c'est chinois/japonais/coréen/...

Comment puis-je dire à WordPress de supprimer automatiquement (pas seulement le spam) ces messages?

2
Martin Thoma

Les caractères que vous avez cités ici sont Han (utilisé en chinois), car ils correspondent à la propriété de caractère unicode \p{Han}.

Vous pouvez effectuer une recherche d'expression régulière dans un plugin comme ceci:

<?php

/**
 * Plugin Name: Drop comments by chars
 * Description: Delete comments which includes unicode characters of Han, Hangul and Cyrillic.
 * Version:     2014.02.18
 * Author:      David Naber
 * Licence:     MIT
 * Licence URI: http://opensource.org/licenses/mit-license.php
 * Copyright:   (c) 2014 David Naber
 * @see         http://wordpress.stackexchange.com/q/116973/31323
 */

/**
 * check for the occurence of Han, Hangul and Cyrillic characters
 *
 * @param string $content
 * @return bool
 */
function wpse_116973_has_unallowed_char( $content ) {

    return (bool) preg_match( '~\p{Hangul}|\p{Han}|\p{Cyrillic}~u', $content );
}

/**
 * @wp-hook comment_post
 * @param int $comment_ID
 * @param array $approved
 * @return void
 */
function wpse_116973_trash_unallowed_comments( $comment_ID, $approved ) {

    $comment = get_comment( $comment_ID );
    if ( ! wpse_116973_has_unallowed_char( $comment->comment_content ) )
        return;

    wp_trash_comment( $comment_ID );
}
add_action( 'comment_post', 'wpse_116973_trash_unallowed_comments', 10, 2 );

La fonction de commande wpse_116973_has_unallowed_char() recherche tous les caractères des langues chinois (Han), coréen (Hangul) et russe (Chyrillique). Le plugin déplace ces commentaires dans la corbeille.

Si quelqu'un veut simplement les marquer comme spam, utilisez le filtre pre_comment_approved comme ceci:

/**
 * @wp-hook pre_comment_approved
 * @param bool $approved
 * @param array $commentdata
 * @return bool|string Returns FALSE, TRUE, or 'spam'
 */
function wpse_116973_allow_comment( $approved, $commentdata ) {

    if ( wpse_116973_has_unallowed_char( $commentdata[ 'comment_content' ] ) )
        return 'spam';

    return $approved;
}
add_filter( 'pre_comment_approved', 'wpse_116973_allow_comment', 10, 2 );
2
David

Vous pouvez utiliser la fonction de liste noire intégrée dans Tableau de bord> Paramètres> Discussion http://www.example.com/wp-admin/options-discussion.php, ajoutez quelques caractères de l'alphabet que vous souhaitez exclure. vous dérange pas encore ... je suppose.

0
Nabil Kadimi