Akismet no conecta. Configurar Akismet detrás de un proxy

Akismet no conecta. Configurar Akismet detrás de un proxy

Si Akismet, el archiconocido plugin de WordPress para evitar SPAM, no es capaz de conectar con sus servidores puede ser por dos motivos, o porque sus servidores están caído (esto no suele pasar), o porque la red donde nos encontramos está bajo un firewall. ¿Qué hacemos en este caso? posiblemente los administradores de esa red provean un salida opcional mediante proxy.

proxy_akismet_linux_hispano

Este fue nuestro caso en uno de nuestro últimos proyecto con Codection. No citaré el nombre de la organización, pero si diré que tiene un volumen bastante grande, y la opción de abrirnos puertos o pasarelas para un servicio determinado no suele ser una opción que se ofrezca. ¿Entonces? Lo que os adelantaba arriba, la instalación de WordPress saldrá por un proxy.

¿Qué problema tiene Akismet con un proxy? Básicamente que no está debidamente preparado. Pero tras unos pocos cambios veréis cómo funciona a la perfección. Os explico cómo hacerlo.

Lo primero es definir en nuestro wp-config las siguientes líneas, especificando lo correspondiente a cada caso.

[code]define(‘WP_PROXY_HOST’, ‘url.del.proxy’);
define(‘WP_PROXY_PORT’, ‘8100’);
define(‘WP_PROXY_USERNAME’, ‘usuario’); // no todos los proxies necesitan autenticación
define(‘WP_PROXY_PASSWORD’, ‘contraseña’);[/code]

Ahora hemos de modificar el plugin, para ello, editamos el archivo akismet.php que encontramos dentro del directorio del plugin (por defecto: /wp-content/plugins/akismet). Buscamos la función akismet_http_post y la reemplazamos por la siguiente. Y eso es todo.

[code]

function akismet_http_post($request, $host, $path, $port = 80, $ip=null){
global $wp_version;
$akismet_version = constant(‘AKISMET_VERSION’);
$args = array(
‘method’=>’POST’,
‘user-agent’=>”User-Agent: WordPress/$wp_version | Akismet/$akismet_version”,
‘body’=>$request
);
$url = “http://”.$host.$path;

if( !class_exists( ‘WP_Http’ ) )
include_once( ABSPATH . WPINC. ‘/class-http.php’ );
$http_request = new WP_Http;
$http_response = $http_request->request($url,$args);
if( is_wp_error( $http_response ) )
return;
$response[0] = $http_response[‘headers’];
$response[1] = $http_response[‘body’];
return $response;
}

[/code]