Generalmente si eres un buen desarrollador, tendrás tu entorno de desarrollo (servidor web, base de datos, etc) instalado en tu máquina local. De esta manera, puedes trabajar rápidamente al evitar solicitudes al servidor web remoto cada vez que realices modificaciones en un archivo o necesites visualizar cambios (por nombrar ejemplos), además, no requieres conexión a Internet, por lo que si ocurre una falla con el servicio o estas usando el ancho de banda para descargar cosas, no afectará tu flujo de trabajo.

En el caso de WordPress, existen dos opciones de configuración: home y siteurl que indican las URLs de la página inicial y sitio respectivamente. Por ello al realizar una instalación y configuración local, éstas variables tienen valores que apunta a localhost. Entonces, al momento de migrar la base de datos al servidor de producción, muchos enlaces quedan bajo el dominio localhost y no al dominio del sitio. Cambiar estos valores no ayuda mucho, pues si tienen imágenes, vídeos y archivos enlazados a contenidos creados dentro del editor, verán que no son accesibles porque siguen apuntando a localhost.

Para cambiarlo, se puede hacer con WP-CLI que es una útil herramienta de interfaz de comandos para WordPress, donde puedes administrar el sitio, datos, respaldos, entre otras cosas, sin salir de la consola. Pues para renombrar los URL de localhost a tu dominio, simplemente debes ejecutar los siguientes dos comandos.

Instalas wp-cli en tu sitio wordpress de producción usando curl:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Luego ejecutas el comando search-replace cuyo primer parametro es la dirección actual (la local) y el segundo la dirección final del sitio:

wp search-replace 'http://localhost/sitio-de-desarollo' 'http://sitio-de-produccion.com/'

En caso que no te sirva el comando anterior porque no tienes configurado para la ejecución de archivos PHP automáticamente desde la consola ejecuta:

php wp-cli.phar search-replace 'http://localhost/sitio-de-desarollo' 'http://sitio-de-produccion.com/'

¡Listo! El comando se encargará de buscar en la base de datos cualquier referencia y la actualiza.

P.D: Si siempre trabajas en el servidor de producción o en un servidor remoto, estas perdiendo tiempo, ancho de banda, recursos y sobre todo dinero. ¡Aprende a optimizar!

Una de las principales preocupaciones de los usuarios de WordPress es el acceso al panel de administración, pues por defecto se encuentra en la ruta /wp-admin y está compuesto de un simple formulario que puede ser atacado por fuerza bruta. Por eso les voy a recomendar dos complementos para aumentar la seguridad de tu sesión en WordPress, al implementar autenticación de dos factores (Two Factor Authentication) y cambiar la ruta por defecto del formulario de inicio de sesión:

  • Rename WP Login: es un plugin muy liviano y sencillo, simplemente te permite definir una url personalizada para el formulario de inicio de sesión en la pantalla de enlaces permanentes, como por ejemplo http://tusitio.org/entrar-al-admin/. Aunque en el título dice que el plugin no tiene soporte, el autor se refiere a que no posee tiempo para resolver cualquier duda que se presente en los foros , sin embargo, acepta parches de código, nuevas funcionalidades, correcciones de bugs, entre otros. Por lo que puedes instalarlo sin preocuparte de que esté obsoleto.
  • Clef: un plugin recomendado por Manuel Camacho, consiste en una autenticación de 2 factores, es decir, aparte de brindar una información que solo tú conoces, debes dar información generada de un objeto que tienes contigo (el móvil o una tarjeta por ejemplo). En este caso, una vez que instalas el plugin la pantalla de inicio de sesión cambia a una especie de QR dinámico, el cual debes escanear con tu teléfono móvil a través de la aplicación Clef, una vez que reconoce el patrón único automáticamente inicia sesión en el sitio, lo chévere es que desde el teléfono controlas el tiempo de sesión e inclusive cerrarla remotamente. También se configurar para usar el inicio tradicional como respaldo en caso de que no tengas el teléfono contigo.

 

Utiliza Clef para aumentar seguridad de tu sesión en WordPress

Ejemplo de como funciona Clef

Con estos 2 sencillos plugins que puedes instalar y configurar en poco tiempo, podrás seguridad de tu sesión en WordPress, o mejor aún, el de tus clientes. Finalmente, si conocen alguna alternativa o desean compartir información adicional, no duden en dejar un comentario para mejorar la seguridad de nuestros sitios.

Editado el 15/06/2016: Ya el servicio de Clef no está disponible 🙁 puedes usar Google Authenticator para validar tus credenciales.

 

Luego de mas de un año sin poder dedicarme a este proyecto personal, he podido liberar la versión 3.0 de jQuery Archive List un widget de WordPress para mostrar el historial de sitio de una mejor manera y con efectos de jQuery. El salto a la versión 3, es debido a grandes cambios en el código de Javascript y en algunas cosas internas de plugin.

Entre las mejoras de esta nueva versión podrán encontrar:

  • Re-escritura completa del código Javascript, ahora ocupa menos espacio, código mas entendible y debería funcionar mas rápido.
  • Finalmente he agregado soporte para tipos de entradas personalizadas, así que puedes usar este widget si tienes tipos de contenido personalizados.
  • Agregué la clase active a los elementos que enlazan a la página actual.
  • Agregué el atributo de título a los enlaces para generar código HTML validado por la W3C.
  • Se agregó traducción al Holadés (gracias a Patrick Schreibing).
  • Se migró la selección de categorías al API de WordPress.
  • Se solucionó errores de exclusión de categorías.
  • Se solucionó el error de la ausencia de la clase expanded en los meses (gracias to pjarts).
  • Se solucionó el error de no expandirse los meses al seleccionar algunas opciones.

Descárgalo desde el gestor de Plugins de WordPress o desde el sitio oficial de jQuery Archive List Widget. Y cualquier reporte o duda, no te olvides de reportarla en los foros de soporte de WordPress.

Hace unas semanas acepte la invitación de Osledy Bazo para participar en un proyecto de un podcast para Coders Venezuela sobre desarrolladores web Venezolanos, porque desde hace varios años soy seguidor del sitio y me gusta participar en este tipo de cosas. La entrevista, esta centrada en el desarrollo para WordPress, donde he estado realizando trabajos y plugins de código abierto desde hace tiempo. Sin embargo, en algunas partes hablo un poco sobre mi vida personal, trabajos, ideas, la academia, entre otras cosas.

En fin, les recomiendo escuchar la entrevista y si les gustó, compártanlo para apoyar este proyecto, pues me parece interesante para conocer programadores locales.

Enlace del podcast:

Segundo Podcast de Coders Venezuela – Miguel Angel Useche sobre desarrollo de plugins para WordPress.

Para quienes tienen alojado un sitio WordPress en un servidor propio, probablemente estén usando el plugin Jetpack para aprovechar muchas de las funcionalidades de WordPress.org: estadísticas de visitas, botones para compartir, mejores comentarios, versión móvil, entre otros. Sin embargo, este plugin añade muchos archivos (innecesarios muchas veces) Javascript al sitio, aumentando el tamaño del sitio y ralentizando la carga del sitio.

Para evitar esto, podemos instalar adicional el plugin Jetpack Lite que elimina todos los módulos exceptuando el de estadísticas y enlaces cortos de wp.com, pero con pequeñas modificaciones en el ćodigo podemos controlar cuáles módulos cargar:

  • Abrimos el archivo jetpack-lite.php y nos ubicamos en la linea 32.
  • Si observamos, hay una funcion llamada Leave_only_JetpackLite_modules que se llama en el hook jetpack_get_available_modules, esta función devuelve un arreglo con los módulos a activar, por eso debemos simplemente agregar nuevas entradas al arreglo $return desde $modules para activar módulos, por ejemplo:
    $return['stats'] = $modules['stats']; //Estadísticas
    $return['shortcodes'] = $modules['shortcodes']; //Código corto para vídeos
    $return['sharedaddy'] = $modules['sharedaddy']; //Botones para compartir en redes sociales
    $return['comments'] = $modules['comments'];//Mejoras en la caja de comentarios
  • Para obtener la lista de módulos, simplemente navega hasta la ruta /wp-content/plugins/jetpack/modules/ y cada carpeta representa a un módulo, si sabes inglés entenderás que hace cada uno de ellos por su nombre y debes agregarlo al vector comentado en el paso anterior.
  • Una vez agregado todos los módulos al vector $return, debes agregar cada uno de ellos en el array declarado en la función Activate_only_JetpackLite_modules:
    return array( 'stats', 'shortcodes', 'sharedaddy', 'comments','publicize' );
  • Una vez que subas los cambios y recargues el sitio, solo deberías tener activado los módulos necesarios y los archivos Javascript que se requieren sólo para las funcionalidades activas.

Nota: Al instalar Jetpack Lite debes tener instalado Jetpack. Pues el plugin no es un fork sino un pequeño código para eliminar la carga de todos los módulos. Y si tienes alguna duda o problema, no dudes en dejar un comentario para ayudarte.

MobilePress es un buen complemento para WordPress para crear una versión móvil del sitio. Básicamente su función es detectar si se visita desde un dispositivo móvil (teléfono o tableta) y muestra un tema adaptado a las resoluciones que manejan las pantallas de esos.

Su funcionamiento es muy bueno y lo utilizo desde hace años por la facilidad para crear un tema móvil. Sin embargo, al acceder desde un dispositivo con Firefox OS me llevaba al sitio de escritorio, revisando me di cuenta que el “Agente de Usuario (User Agent)” del navegador utiliza:

Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0

Al verlo me llamó la atención la ausencia de identificación del sistema operativo, esto se debe según Mozilla a que la web es la plataforma y no Firefox OS. Como la mayoría de programas identifican a los sistemas móviles por su marca: Android, iPhone, etc. No suelen detectar la palabra Mobile. Revisando el plugin MobilePress, en el archivo mobilepress/classes/check.php hay una función llamada function is_mobile() donde a través de una expresión regular revisa varios agentes de usuario escritos y si lo encuentra muestra la versión móvil. Entonces al cambiar la expresión regular y añadir Mobile (con mayúscula):

preg_match( '/(Mobile|alcatel|

Una vez guardados los cambios, ahora podrás disfrutar de tu sitio móvil en Firefox OS.

Este artículo cuenta mi experiencia luego de tres años, al desarrollar un proyecto de software libre (licencia GPL) y motivarlos a crear sus propios proyectos o colaborar en los existentes. Si no te gusta leer mucho, básicamente quiero compartir que al crear y mantener un proyecto de software libre logras: aprender a ser mejor programador al recibir correcciones de otras personas,  conoces gente de varias partes del mundo interesadas en tu programa, ves correr el programa en lugares no pensados, recibes código programado por otras personas, puedes recibir dinero sin previo aviso y sin nada a cambio, consigues futuros clientes y recibes felicitaciones por resolver un problema de otra persona.

Inicio

Como mi blog hecho con WordPress empezó a acumular años, el historial de artículos se hizo grande y ocupaba mucho espacio para mostrarlo. La solución por defecto es mostrar los años en una caja desplegable pero lucía muy feo y conseguí un sencillo plugin que los mostraba en un menú desplegable con animación hecha en Javascript. El plugin dejó de soportarse al poco tiempo y no siguió funcionando con WordPress, por ello, decidí hacer uno similar y como estaba aprendiendo jQuery (estaba de moda) lo utilicé para la implementación y nombre. Escribirlo fue fácil pues WordPress ofrece una excelente documentación, además, utilicé el plugin que usaba como base.

¿Ofrecerlo como software libre o usar una licencia cerrada y venderlo?

Una vez terminado, pense en 3 posibilidades: usarlo para mi mismo, venderlo por un precio muy barato y ganar algo de dinero por él, liberarlo como software libre porque le podría servir a alguien con la misma necesidad que yo. Decidí ésta última porque por primera vez tenía algo que surgía de una necesidad y estaba seguro de servirle a mucha gente en la misma situación que yo. Lo subí a WordPress y mi sorpresa es que tuvo bastantes descargas los primeros días (creo que como 300).

Por novatada, empecé a recibir peticiones (no quejas) de gente que deseaba mejor código porque no me entendían, soporte para otros días (me decían que si hablaba español por qué no había menús en este lenguaje), soporte para cambiar el formato del mes, etc. Aproveché un tiempo libre y lancé una segunda versión con el código mas sencillo y limpio, documentado, soporte para multi-idioma (en ese momento inglés y español) e implementé la funcionalidad del mes.

Primeras contribuciones

Luego de esos cambios pensé que el plugin estaba listo y no era necesario hacer mas cosas, para mi sorpresa empecé a recibir ideas de nuevas funcionalidades, código de personas para añadir compatibilidad de características de WordPress desconocidas para mi, por ejemplo, para ese entonces no conocida de WordPress MU, shortcodes, filtros, etc. Recibí parches para mejorar el código SQL porque había una persona con miles de posts, etc.

Mi sorpresa es ver como gente desconocida, se tomó el tiempo para estudiar el código elaborado por mí, modificarlo para soportar sus necesidades y compartirlo conmigo para incluirlo en la rama oficial, permitiendo al resto de usuarios disfrutar de estas funcionalidades. Además, las funcionalidades implementadas eran interesantes y muy variadas, yo sólo no hubiese podido hacerlas porque eran situaciones muy distintas en cada caso. Otra cosa interesante, fue que uno de los primeros programadores en enviarme código, tradujo el plugin a Checo y Esloveno, dos idiomas que jamás pensé contar en mi plugin.

Mantenimiento

Una vez con una base de funcionalidades generales, gente empieza a pedir características  mas complejas, a veces fuera de las funcionalidades o el objetivo del plugin, generalmente algunas se resolvían con otro plugin y otras tuve que agregarlas. Una de las mas solicitadas era la posibilidad de excluir tareas pero fallé, sin embargo, otro de los primeros programadores  en contribuir lo implementó sin que le pidiera ayuda y pude ofrecerlo al resto.

Al momento de estabilizarse el proyecto: buena base de usuarios, programadores voluntarios contribuyendo en el proyecto. Noté un incremento en el soporte, la gente al ver que el plugin funciona bien desean expandir sus posibilidades y empiezan a contactarte para ver como realizar ciertas cosas o dar nuevas idea.  Comencé a recibir donaciones simplemente por realizar el plugin, motivandome a realizar nuevas funcionalidades (como soportar muchas instancias que requería casi re-escritura total).

En otras palabras, una vez que el proyecto se mantiene, el mantenimiento consiste en arreglar bugs, dar soporte a las personas y dependiendo de la frecuencia de solicitudes, agregar funcionalidades nuevas. En este punto es bien porque ya vez el fruto del esfuerzo realizado anteriormente, sin embargo, me parece delicado descuidarlo porque se puede ir todo para atrás. Pues aquí la gente confía mas en tí y espera respuestas rápidas, tal vez algunas sean incómodas al exigir como si estuviesen pagando altas sumas por ello, pero otras son buenas al agradecerte por el esfuerzo realizado.

Conclusiones

Después de este tiempo, puedo decir que es uno de los proyectos mas satisfactorios a nivel profesional y pesonal, en el primer ámbito porque me permite mejorar mis capacidades de programación, conseguir nuevos clientes (mi mayor cliente lo conseguí al solucionarle un problema con este plugin), mejora el currículo (puedo demostrar capacidad de liderar un proyecto, experiencia con PHP y WordPress, Javascript, etc) y mas. Respecto a la parte personal, cada vez que recibo un correo de una persona agradeciendome por el trabajo, por el tiempo ahorrado al utilizar este programa, al ver ejecútandose en sitios conocidos o muy extraños. Me alegra saber que he ayudado a otra persona sin nada a cambio, además cuando recibo donaciones pues también es bien saber que se recibe una recompensa monetaria extra por un trabajo que muchas veces es para mí (para mi blog).

Si alguno tiene una idea o programa en mente, es sencillo y sienten que pueden ayudar a otro, liberelenlo bajo una licencia de código abierto, publiquen el repositorio y con el tiempo verás como crece con la ayuda de otros programadores. Realmente es una buena experiencia.

Si alguno desea conocer o probar mis 2 plugins, pueden hacerlo en las siguientes direcciones:

Happy Hacking!