2015-09-29 2 views
1

Я бы хотел проверить специальную форму против спама с помощью Akismet. Я искал в Интернете, и единственным простым способом я нашел это (см. Выдержку ниже): http://www.binarymoon.co.uk/2010/03/akismet-plugin-theme-stop-spam-dead/. К сожалению, $ isSpam возвращает true!Как интегрировать Akismet в wordpress/php программно

Кто-нибудь знает, как сделать магию? Я ценю вашу помощь.

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

Во-первых, можно предположить, 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' => '[email protected]', 
     '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_ip иДля функции akismet_http_post требуютсяпараметров.

Также было бы неплохо упомянуть, что Akismet имеет libraries и хорошо API документов.

+0

Решение работает (возвращает true). Тем не менее, я не совсем уверен, что Akismet выполняет свою работу, поскольку он возвращает true также, когда я передал тестовую строку, которую я нашел в Интернете .. (заявив, что массив ответов $ кажется правильно указанным). Спасибо. – user1232551

Смежные вопросы