Ian Murdock ha muerto

Lamentablemente en el blog de docker y en los blogs de Debian anuncian la muerte de Ian Murdock. Quiénes hemos estado en el mundo del software libre desde hace años, seguimos su gran carrera principalmente por el desarrollo del proyecto Debian (del cual se basan la mayoría de distribuciones como Ubuntu), lideró el proyecto de Open Solaris, fue CTO de Linux Foundation y últimamente estaba trabajando con el equipo de Docker.

Aunque hace unos días compartió unos problemas personales en su cuenta de Twitter, su familia ha insistido en respetar su privacidad sobre todo en estos momentos. Por eso es mejor recordarlo por todas las grandes contribuciones realizadas al mundo del software libre.

Ian Murdock. Fuente: Wikipedia.org

Si no conoces quién es, te recomendamos leer un breve resumen de la carrera profesional de Ian Murdock en su página oficial.

Paz a sus restos.

Cómo ordenar de forma personalizada elementos en Woocommerce

En Woocommerce, puedes ordenar el listado de productos de varias formas en Ajustes -> Productos -> Ordenamiento de Productos por defecto, pero si en alguna parte del sitio necesitas crear tu propio listado a través de una consulta (generalmente mediante WP_Query) a la base de datos, lo mas probable es que desees mantener el orden establecido en ese apartado.

La manera de mantener el orden, es extraer esa configuración inicial mediante el objeto global $wp_query, pues posee la información por defecto (o la modificada por el usuario) para realizar una consulta, así que accediendo a los atributos order, orderby y enviando ambos al la consulta, obtendrás el orden de la configuración inicial, tal como se muestra en el siguiente ejemplo:

$args = array(
   'posts_per_page' => -1,
   'post_type'      => array('product'), //Para consultar solo los productos
   'product_cat'    => $category, //Me traigo una categoria deseada
   'order'          => $wp_query->get('order'), //Trae el orden seleccionado en frontend
   'orderby'        => $wp_query->get('orderby') //Trae el atributo de orden seleccionado en el frontend
);
$loop = new WP_Query( $args );

Recuerda que debes previamente traer el objeto global $wp_query y luego con el resultado de la consulta, la puedes recorrer con los métodos normales de WordPress.

Hace 5 años en esa fecha: Liberado jQuery Categories List 1.1

Mantenimiento anual del blog

¡Saludos lectores! Casi siempre a final de año, dedico unos días a realizar mantenimiento de este sitio: evaluando plugins, chequeando mejores opciones, incorporar nuevas tecnologías web, entre otros. Este año como el tema actual me sigue gustando, me dediqué a mejorar la versión móvil y mejorar la experiencia de usuario a todas las plataformas.

También realicé los siguientes cambios:

  • La barra lateral ahora ocupa todo el espacio vertical y al desplazar la página, la barra se mantiene al fondo para que siempre veas información.
  • Mejoras de usabilidad en el pie de página.
  • Los enlaces en la versión móviles están mejor organizados para evitar presionar por equivocación otro enlace.
  • Se removió todo el código de mi página en Facebook, pues poca gente lo usa y causa muchos retrasos en la carga del sitio, ademas sirve para rastrearte.
  • Mejor paleta de colores en la foto de mi perfil gracias a Tatica.
  • Grandes optimizaciones a las imágenes de la plantilla, mejora en la carga de JS, compresión del código HTML, mejoras en la cache desde el navegador, mejoras en respuesta de contenido estático, entre otros.

En otras palabras, el sitio debería cargar mejor y verse mas amigable en dispositivos móviles.

Nota: Agradezco que me reporten cualquier detalle incorrecto que encuentren.

Charla sobre como mejorar la salud siendo Informático

Ser informático es una profesión con muchas ventajas, pero creo que un problema que nos afecta a todos nosotros, son las consecuencias de estar sentado muchas horas frente a la computadora. Aunque la mayoría sabemos que se incrementa el peso, se afecta el sueño, etc. Pocos toman medidas para reducir o evitar estas consecuencias.

En el Reject.JS 2015, hubo un charla que me llamó la atención porque a pesar de ser un evento con contenido técnico, esta ponencia habló sobre lo comentado en el párrafo anterior,  creando conciencia sobre problemas de salud comunes entre informáticos, medidas para evitarlos y mejorar nuestra salud en general. Les recomiendo verla para que conozcan sobre este tema y vayan aplicando los consejos para mejorar sus vidas.

Me pareció extraño ver una charla con ese tema en un evento técnico, pero como los asistentes somos informáticos, creo que sirvió para dar a conocer como mejorar la calidad de vida y salud de todos. Ojalá futuros eventos tomen la iniciativa e incluyan charlas interesantes para los informáticos pero con contenido fuera de lo técnico.

Hace 10 años en esa fecha: Ayudemos a Wikipedia

Cómo enviar los correos electrónicos predefinidos de Woocommerce

Woocommerce es una excelente herramienta para montar tu propia tienda en línea, es fácil de instalar y usar gracias que está construida sobre WordPress. Ademas es posible modificar todo su comportamiento mediante la instalación o construcción de plugins.

Hace unas semanas construyendo un plugin para cambiar el flujo normal de los estados de una orden, me tocó enviar los correos predefinidos (nueva orden, orden procesada, etc) manualmente. Para mi sorpresa no encontré documentación sobre como hacerlo, y al leer el código fuente de la clase para enviar correos, me dí cuenta que posee estructura extraña porque utiliza muchos hooks y variables globales, así que me costó hacerlo.

Envío de correos

Woocommerce posee una clase llamada WC_Emails (no confundir con WC_Email que es abstracta para definir una plantilla de correo) cuya tarea es cargar todas las plantillas de correos definidas y posee métodos para enviar el correo. Pues simplemente se debe seleccionar una de las plantillas disponibles y ejecutar el método trigger con los parámetros requeridos para enviar el correo electrónico, es importante NO instanciar un objeto desde esta clase, pues al momento de crearse se instancia ciertas cosas de la plantilla y se ejecutan, ocasionando bugs como repetición del encabezado y ejecución múltiple de hooks.

Por ello, solo debemos llamar a la función WC()->mailer() que siempre nos devuelve el objeto global de WC_Emails, seleccionamos la plantilla en el atributo emails, podemos personalizar el texto del sujeto o encabezado del correo y finalmente se ejecuta el método trigger con los parámetros del contenido del correo (los cuales varían en cada plantilla), tal como se puede observar en el siguiente ejemplo:

$wcEmail = WC()->mailer();
$emailer = $wcEmail->emails['WC_Email_Customer_Note']; //Enviar una nota al usuario
$emailer->subject = $subject; //Sujeto del correo
$emailer->heading = $title; //Título del contenido del correo
$emailer->trigger(array(
   'order_id' => $order_id, //Número de la orden
   'customer_note' => $msg  //Contenido de la nota
));

Las plantillas de correo disponibles por defecto (ya que puedes agregar tus propias plantillas) son:

  • WC_Email_New_Order
  • WC_Email_Cancelled_Order
  • WC_Email_Customer_Processing_Order
  • WC_Email_Customer_Completed_Order
  • WC_Email_Customer_Refunded_Order
  • WC_Email_Customer_Invoice
  • WC_Email_Customer_Note
  • WC_Email_Customer_Reset_Password
  • WC_Email_Customer_New_Account

En caso de necesitar los parametros, simplemente chequeen los archivos con las clases. El nombre del archivo es la misma constante pero todo en minúsculas y cambiando piso por guiones, por ejemplo, WC_Email_Customer_Invoice está definido en el archivo wc-email-customer-invoice.php. Es fácil, aunque parezca lo contrario. Pero descubrir esta información me tomó tiempo al tener que chequear el código fuente de los correos en woocommerce, así que espero que les haya servido de gran ayuda y ahorra de tiempo.

Hace 7 años en esa fecha: Amarok 2 disponible ahora en Windows