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

时间:2015-09-29 05:50:34

标签: php wordpress spam-prevention akismet

我想使用Akismet查看针对垃圾邮件的自定义表单。 我搜索了网页,我找到的唯一简单方法就是这个(参见下面的代码摘录):http://www.binarymoon.co.uk/2010/03/akismet-plugin-theme-stop-spam-dead/。不幸的是$ isSpam返回true!

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

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;

}

1 个答案:

答案 0 :(得分:1)

首先,您可以假设安装了akismet并验证了API密钥,这样您就可以直接使用akismet_http_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 );
}

这未经过彻底测试,但应该有效..

请注意blog功能需要user_ipuser_agentakismet_http_post参数。

另外,很高兴提到Akismet有libraries和好API文件。