web-dev-qa-db-fra.com

Comment filtrer un type de contenu personnalisé avec le plugin Akismet?

J'ai plusieurs boîtes de saisie et aucune zone de texte dans mon type de contenu personnalisé. Puis-je utiliser Akismet fourni avec WP pour cela? Si je peux, comment faire ça?

Par exemple. Si j'ai 5 boîtes de saisie telles que: nom, adresse, ville, téléphone, email dans mon formulaire qui est enregistré à partir de la page d'accueil et utilisé pour un traitement ultérieur.

Comment utiliser Akismet sur cela? C'est possible?

si les noms de l'entrée sont: nom, adresse, ville, téléphone et adresse électronique, comment configurer le plugin Akismet. Que faut-il faire pour qu'aucun spams ne soit enregistré dans ma base de données? (Je dois filtrer les données avant de les enregistrer en utilisant akismet dans ma fonction dans functions.php. Donc, si j’obtiens les valeurs telles que, par exemple,.

$name = $_POST['name'];
$name = $_POST['address'];
$name = $_POST['city'];
$name = $_POST['telephone'];
$name = $_POST['email'];

// here I need if condition to use akismet database to redirect back to the post without executing the rest of my code in my function.

Comment faire une telle condition en utilisant le plugin Akismet fourni avec Wordpress?

5
Derfder

Akismet - bibliothèques:

Je veux d’abord mentionner qu’il existe de nombreuses bibliothèques Akismet :

http://akismet.com/development/

et voici les documents de l'API:

_ { http://akismet.com/development/api/

Akismet - plugin WordPress:

Mais si je comprends bien, vous souhaitez utiliser le plugin Akismet WordPress en tant que bibliothèque .

L'extrait de code suivant est une preuve de concept simple, basée sur le plugin Akismet :

// We assume that Akismet is installed with the corresponding API key
if( function_exists( 'akismet_http_post' ) )
{   
    global $akismet_api_Host, $akismet_api_port;

    // data package to be delivered to Akismet (Modify this to your needs)
    $data = array( 
        'comment_author'        => 'Mr. Spam',
        'comment_author_email'  => '[email protected]',
        'comment_author_url'    => 'spamalot.com',
        'comment_content'       => 'Hello Spam World!',
        'user_ip'               => '123.123.123.123',
        'user_agent'            => '',
        'referrer'              => '',
        'blog'                  => 'http://example.com',
        'blog_lang'             => 'en_US',
        'blog_charset'          => 'UTF-8',
        'permalink'             => 'http://example.com/hello-world',
        'is_test'               => TRUE,
    );

    // construct the query string
    $query_string = http_build_query( $data );
    // post it to Akismet
    $response = akismet_http_post( $query_string, $akismet_api_Host, '/1.1/comment-check', $akismet_api_port );
    // check the results        
    $result = ( is_array( $response ) && isset( $response[1] ) ) ? $response[1] : 'false';
    // display the result (it can be 'true', 'false' or some error message )    
    printf( 'Is it spam? Akismet says: %s', $result );
}

où j’utilise la fonction akismet_http_post pour publier les données sur les serveurs Akismet.

Selon la documentation de l'API, les paramètres } suivants sont requis:

blog, user_ip, user_agent

et il faut être prudent en ce qui concerne l'orthographe du paramètre referrer ;-)

Les autres fonctions Akismet utiles sont par exemple:

- akismet_get_key()
- akismet_check_key_status()
- akismet_verify_key()

La réponse que j'ai eue lors du test d'un commentaire de spam réel était la suivante:

Array
(
    [0] => Array
        (
            [server] => nginx
            [date] => Wed, 23 Oct 2013 12:44:37 GMT
            [content-type] => text/plain; charset=utf-8
            [content-length] => 4
            [connection] => close
            [x-akismet-server] => 192.0.80.244
            [x-akismet-guid] => 07d0136b53cda37432ff5a7b6d86c843
        )

    [1] => true
)

avec le positif (vrai) spam result.

La prochaine étape serait de modifier cela en une fonction utilisable ou une classe.

Puisque vous utilisez des champs de formulaire personnalisés, vous pouvez les mapper comme suit:

name                       --> comment_author
email                      --> comment_author_email
address + city + telephone --> comment_content
7
birgire

Je ne pense pas qu'akismet soit le bon outil pour vous. Le mode de fonctionnement d’akismet repose sur l’analyse du contenu de millions de commentaires et la détection de spam, mais le contenu de votre formulaire n’est pas similaire à celui des commentaires. Par conséquent, l’analyse sera sans valeur. La seule chose que akismet puisse faire avec votre code est de vérifier les adresses IP samming connues, ce que vous pouvez faire avec d’autres services comme le projet honeypot qui pourrait constituer une meilleure alternative, car vous devez payer pour utiliser akismet sur n’importe quel serveur. site commercial. N'oubliez pas qu'avec akismet, vous devez également décider de ce que vous faites lorsqu'il signale quelque chose comme spam. Le comportement par défaut du plug-in consiste à conserver les commentaires dans la base de données afin qu'un utilisateur puisse les vérifier pour détecter de faux positifs. Pour imiter le fait que vous devrez également conserver vos formulaires dans la base de données, même s'ils étaient marqués comme sam, vous devrez toutefois développer une nouvelle interface utilisateur.

Il existe une solution plus simple qui pourrait être encore plus efficace que d'utiliser akismet. Il suffit d'utiliser JS pour injecter une entrée masquée avec une valeur connue dans le formulaire et valider la valeur lors du traitement de la sous-présentation côté serveur. si la validation échoue, le formulaire est probablement du spam. Si vous craignez que des personnes n'utilisant pas JS ne puissent pas envoyer le formulaire, vous pouvez toujours ajouter une notification indiquant que JS doit être activé pour envoyer le formulaire à votre formulaire et le masquer dans JS. À l'heure actuelle, la plupart des spambots n'analysent pas et n'exécutent pas JS, ce qui devrait être un très bon moyen de bloquer le spam.

0
Mark Kaplun