Как программно интегрировать Akismet в WordPress / PHP

Я хотел бы проверить пользовательскую форму от спама с помощью 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

Решение

Во-первых, вы можете предположить, что 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_ip а также user_agent параметры необходимы для akismet_http_post функция.

Также хотелось бы отметить, что Акисмет библиотеки и хорошо API документы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector