public static function pre_check_pingback($method) { if ($method !== 'pingback.ping') { return; } global $wp_xmlrpc_server; if (!is_object($wp_xmlrpc_server)) { return false; } // Lame: tightly coupled with the IXR class. $args = $wp_xmlrpc_server->message->params; if (!empty($args[1])) { $post_id = url_to_postid($args[1]); // If this gets through the pre-check, make sure we properly identify the outbound request as a pingback verification Akismet::pingback_forwarded_for(null, $args[0]); add_filter('http_request_args', array('Akismet', 'pingback_forwarded_for'), 10, 2); $comment = array('comment_author_url' => $args[0], 'comment_post_ID' => $post_id, 'comment_author' => '', 'comment_author_email' => '', 'comment_content' => '', 'comment_type' => 'pingback', 'akismet_pre_check' => '1', 'comment_pingback_target' => $args[1]); $comment = Akismet::auto_check_comment($comment); if (isset($comment['akismet_result']) && 'true' == $comment['akismet_result']) { // Lame: tightly coupled with the IXR classes. Unfortunately the action provides no context and no way to return anything. $wp_xmlrpc_server->error(new IXR_Error(0, 'Invalid discovery target')); } } }
function akismet_pingback_forwarded_for($r, $url) { return Akismet::pingback_forwarded_for($r, $url); }