如何以编程方式在 wordpress/php 中集成 Akismet

How to integrate Akismet in wordpress/php programmatically

我想使用 Akismet 检查自定义表单以防垃圾邮件。 我在网上搜索,发现的唯一简单方法是(参见下面的代码摘录):http://www.binarymoon.co.uk/2010/03/akismet-plugin-theme-stop-spam-dead/。不幸的是 $isSpam returns 是的!

有谁知道怎么变魔术吗?我感谢您的帮助。

function akismet_isSpam ($content) {

// innocent until proven guilty
$isSpam = FALSE;

$content = (array) $content;

if (function_exists('akismet_init')) {

    $wpcom_api_key = get_option('wordpress_api_key');

    if (!empty($wpcom_api_key)) {

        global $akismet_api_host, $akismet_api_port;

        // set remaining required values for akismet api
        $content['user_ip'] = preg_replace( '/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR'] );
        $content['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
        $content['referrer'] = $_SERVER['HTTP_REFERER'];
        $content['blog'] = get_option('home');

        if (empty($content['referrer'])) {
            $content['referrer'] = get_permalink();
        }

        $queryString = '';

        foreach ($content as $key => $data) {
            if (!empty($data)) {
                $queryString .= $key . '=' . urlencode(stripslashes($data)) . '&';
            }
        }

        $response = akismet_http_post($queryString, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
        smart_dump($response, true);

        if ($response[1] == 'true') {
            update_option('akismet_spam_count', get_option('akismet_spam_count') + 1);
            $isSpam = TRUE;
        }

    }

}

return $isSpam;

}

首先,您可以假设安装了 akismet 并验证了 API 密钥,这将允许您使用 akismet_http_post 函数直接将数据 post 发送到服务器..

// Like above mentioned, 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 to be delivered to Akismet (This is what you need Modify this to your needs)
    $data = array( 
        'comment_author'        => 'Spammer Spammy',
        'comment_author_email'  => 'spammy@spamserver.com',
        'comment_author_url'    => 'spamming.com',
        'comment_content'       => 'my Spam',
        'user_ip'               => '99.99.99.99',
        'user_agent'            => '',
        'referrer'              => '',
        'blog'                  => 'http://example.com',
        'blog_lang'             => 'en_US',
        'blog_charset'          => 'UTF-8',
        'permalink'             => 'http://example.com/my-link',
        'is_test'               => TRUE,
    );

    // Now we need to construct the query string
    $query_string = http_build_query( $data );
    // and then post it to Akismet
    $response = akismet_http_post( $query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port );
    // ..and check the results        
    $result = ( is_array( $response ) && isset( $response[1] ) ) ? $response[1] : 'false';
    // display the result ( 'true', 'false' or any error message you want )    
    printf( 'Spam check according to Akismet :%s', $result );
}

这没有经过彻底测试,但应该可以工作..

请注意,bloguser_ipuser_agent 参数对于 akismet_http_post 函数是必需的。

此外,很高兴提及 Akismet 有 libraries and good API 个文档。