Use get_the_terms() instead of wp_get_object_terms()

I was recently debugging the front page of a WordPress site and found a lot of queries to the terms and term relationships database tables. Digging a little deeper, I found that the culprit were a set of functions that were calling wp_get_object_terms() to get the terms from a set of looped posts… and then… Continue reading Use get_the_terms() instead of wp_get_object_terms()

Unified search with Elasticsearch and WordPress

During the last months of 2012, and as a part of AyerViernes, we worked on one of those projects that is as challenging as delightful to take part in, developing a unified search system for a network of over 200 WordPress sites (both single-install and multisite).

We developed a real-time sync plugin integrating the WordPress sites with an Elasticsearch instance with different content types (mappings) that give us plenty of room to index and search in hundreds of thousands documents generated by the university staff.

You can read the complete post (in spanish) on Medium: Desarrollo de sistema de búsqueda transversal: +200 sitios a un clic de distancia

Importar tu base de datos de WordPress (de la forma más rápida)

Uno de los grandes aprendizajes que he podido aplicar al desarrollo de sitios con WordPress, y del cual soy particularmente entusiasta de sermonear es la necesidad de mantener una versión local de desarrollo lo más parecida posible a lo que vas a utilizar en producción, lo que además se apoya y soporta un montón de… Continue reading Importar tu base de datos de WordPress (de la forma más rápida)

Cómo agregar un nuevo panel a WordPress Debug Bar

Una de las ventajas del plugin WordPress Debug Bar es que puedes agregar nuevos paneles según tus propias necesidades; por ejemplo, para mostrar datos de respuestas desde APIs externas o conexiones con web services u otras funcionalidades que hayas implementado de forma particualr. Por supuesto, este es un ejemplo simplificado, pero es el punto de… Continue reading Cómo agregar un nuevo panel a WordPress Debug Bar

Adding a new panel to the WordPress Debug Bar plugin

You can extend the WordPress Debug Bar plugin adding new custom panels to fit your needs; for instance, showing responses from external APIs or webservices, or for other custom features. That’s an extremely simple example. You can check a more complex and complete one by viewing the source of one of the Debug Bar extender… Continue reading Adding a new panel to the WordPress Debug Bar plugin

Al configurar el nombre del dominio en un vhost de nginx puedes utilizar una expresión regular. Esto te sirve, por ejemplo, para capturar el nombre del subdominio para reutilizarlo como variable.

En este snippet, capturamos el nombre del subdominio como subdomain (línea 2) y luego utilizamos el método de carga de imágenes remotas con proxy inverso para mostrar las imágenes que no existen en nuestra copia de desarrollo.

server {
  server_name ~^(?<subdomain>[a-z0-9-]+)\.development\.lo$;
  root /var/www/development/htdocs;
  resolver 208.67.222.222 208.67.220.220 8.8.8.8 8.8.4.4;
  location ~* ^/wp-content/uploads/(.*)$ {
	if ( !-e $request_filename ) {
	  proxy_pass http://$subdomain.testing.com$uri;
	}
  }
  include global/restrictions.conf;
  include global/wordpress.conf;
}

Automatizar tareas de traducción de WordPress con Grunt

Grunt es una de esas herramientas que al principio parece un poco intimidante, pero al empezar a utilizarla se hace cada vez más necesaria y adictiva. Por si aún no lo conoces, Grunt es un programita hecho en javascript sobre node.js que permite automatizar una gran cantidad de tareas, y sirve especialmente para poner a… Continue reading Automatizar tareas de traducción de WordPress con Grunt

Recientemente rediseñamos el sitio de nuestra aplicación para la gestión de hoteles, y uno de los cambios más importantes fue poder ofrecer una mejor experiencia a los visitantes según su idioma. También nos interesaba tener una mejor interacción en los comentarios del blog, y para ello decidimos utilizar la plataforma de Disqus, que entre otras cosas, permite suscripciones por correo electrónico a los comentarios, identificación con cuentas de terceros, moderación por e-mail, etc.

Uno de los problemas que encontramos fue que Disqus tiene una configuración global para la cuenta, por lo que la opción que configuras en su panel aplica a todas las conversaciones en el sitio. Sin embargo, escudriñando el código del plugin para WordPress pude hallar un filtro que permite indicar explícitamente el idioma en que se debe cargar la sección de comentarios:

add_filter('disqus_language_filter', function( $lang ){
	// la función pll_current_language es del plugin polylang; y devuelve el idioma de la entrada actual
	$current_language = function_exists('pll_current_language') ? pll_current_language('locale') : 'es_ES';
	// ojo que en Disqus, inglés es "en" pero español "es_ES" :-P
	return $current_language == 'en_US' ? 'en' : $current_language;
});

Y si no estás usando WordPress, puedes indicar el idioma en la configuración del embebible.

Cómo asegurar las cookies de acceso a tu sitio WordPress

Recientemente se ha dado a conocer una vulnerabilidad en el sistema de autenticación de usuarios para los sitios con WordPress, que básicamente consiste en lo siguiente: La vulnerabilidad afecta tanto a sitios en WordPress.com como instalaciones propias. Al acceder a la administración de tu sitio, WordPress crea una cookie que le permite validarte como un… Continue reading Cómo asegurar las cookies de acceso a tu sitio WordPress