Cómo hacer una modificación simple en un plugin de WordPress

En este artículo voy a ilustrar que a veces por comodidad utilizamos un software como viene aunque deseemos que incluya cierta funcionalidad, y olvidamos que una ventaja del software libre es que podemos modificarlo para adaptarlo a nuestras necesidades y la modificación no siempre tiene por qué ser compleja.

En este caso, y aunque no soy programador (aunque obviamente tengo conocimientos generales de programación) me propuse modificar el excelente plugin Better WP Security para que mostrara las direcciones desde las cuales se hacen intentos fallidos de autentificación (por defecto el reporte trae solamente la hora y el nombre del usuario).

¿Cómo proceder? Bueno, lo primero que hice fue buscar en el código fuente del plugin la cadena «Nombre de usuario del intento» para tener una idea de la unidad que necesitaba modificar.

Resulta que esta cadena aparece solo en los archivos de traducción, de modo que abrí el archivo better-wp-security-es_ES.po para averiguar su nombre original en inglés, que resultó ser «Username Attempted», y ahi mismo indicaba dónde aparece la cadena, que en este caso es en el archivo inc/admin/tables.php

De modo que abrí dicho archivo para estudiarlo. Lo primero que noté es que la cadena aparece en una clase llamada log_content_7_table cuya función get_columns prepara un arreglo con las columnas «time» y «username», pero falta la columna de la dirección IP. Esta columna aparece en otros reportes con el título «Servidor», de modo que buscando dicha cadena en el mismo archivo de localización, vi que el nombre original de la cadena en inglés es «Host», y luego buscando en la unidad de código vi que dicha cadena sí se incluye en otras clases como por ejemplo, log_content_4_table o log_content_5_table.

Estas clases además incluyen una función llamada column_host que es la que obtiene y formatea la dirección para su presentación, lo que dicha función es diferente en ambas clases (en la clase log_content_4_table es más compleja porque incluye algunas validaciones que no necesitaremos ahora).

Manos a la obra entonces, modifiquemos la clase log_content_7_table. En primer lugar, insertemos la columna deseada hacia el principio de la función get_columns, donde se define el arreglo de columnas de la base de datos que se van a utilizar para el reporte (de la misma manera que aparece dicha columna en las otras clases):

return array(
'time'        => __( 'Time', $bwps->hook ),
'host'        => __( 'Host', $bwps->hook ), // línea insertada
'username'    => __( 'Username Attempted', $bwps->hook )
);


Ahora, antes de la función column_username insertemos la función column_host, que podemos copiar íntegramente de la clase log_content_5_table:

function column_host( $item ) {
return '<a href="http://ip-adress.com/ip_tracer/' . $item['host'] . '" target="_blank">' . $item['host'] . </a>;
}


Finalmente, en la función prepare_items la clase tiene un iterador que obtiene los datos, insertemos allí también una línea para la columna deseada:

foreach ( $data as $item ) {
$rows[$count]['time'] = $item['timestamp'];
$rows[$count]['host'] = $item['host']; // línea insertada
$rows[$count]['username'] = $item['username'];
$count++;
}


Revisando la unidad, parece que no hay otras cosas que sean afectadas por la modificación, de modo que solo queda guardar los cambios, y probar. Efectivamente, funciona. Ahora podemos conocer fácilmente desde qué dirección intentan iniciar sesión en nuestro blog como administrador.

De modo que como ven, no siempre las modificaciones son difíciles.

¿Te resultó interesante? Compártelo ...



Hugo

Publicado por Hugo

Forma parte de GUTL desde el 6 diciembre, 2011. Miembro fundador de GUTL y uno de los administradores de sus servicios. Usuario regular de GNU/Linux desde 2008 por su trabajo como administrador de redes y sistemas. Aficionado a estudiar las tecnologías y a intercambiar este conocimiento con otros en su tiempo libre.

Este artículo tiene 5 comentarios

    • Me alegra que te pareciera interesante. No suelo modificar plugins de wordpress con frecuencia, pero quizás publique sobre otras cosas.

  1. Cuando le sugería el plugin para la biblioteca virtual a Maikel, traté de hacerle algunas modificaciones, pero ya PHP me da pereza 😀

Los comentarios están cerrados.