Cargar imágenes de sitio remoto a través de proxy inverso con nginx

Independiente del proyecto, CMS o framework sobre el que estés trabajando, contar con una copia local de desarrollo es fundamental.

Aunque replicar configuraciones y bases de datos es algo relativamente sencillo, para proyectos de mediana o gran envergadura se hace especialmente complejo contar con todas las imágenes y archivos subidos por usuarios, por lo que es necesario recurrir a otras alternativas para lograr una réplica útil.

Por supuesto, una alternativa es simplemente realizar una copia mediante rsync u otro mecanismo, pero la librería de imágenes de un sitio grande puede llegar a pesar varias decenas de gigas; por eso la opción de acceder a estos archivos por un proxy resulta muy conveniente y práctica.

Ejemplos de configuración para WordPress

En primer lugar tienes que verificar que nginx tiene el soporte para el módulo de proxy, lo que puedes chequear ejecutando nginx -V desde la consola. Si estás usando la versión que viene en los repositorios de Ubuntu, deberías tenerlo.

Ahora lo más sencillo, para el caso de un sitio único (sin multisite).

https://gist.github.com/felipelavinz/9776262

Y algo más complejo, para multisitio con subdominios:

https://gist.github.com/felipelavinz/9776360

Otro escenario de uso muy útil es para réplicas de sitios que se utilizan como QA.

Vale la pena indicar que lo mismo se puede conseguir con otros servidores web; por ejemplo con Apache. Lighttpd también tiene un módulo de proxy, por lo que también se debería poder.

Using anonymous functions and closures for user-defined array sorting

Anonymous functions and closures are relatively new in PHP, but they’re extremely welcome.

Whenever you need to sort an array with a custom order (that is, with a user-defined comparison function such as usort, uasort or uksort) you can use anonymous functions and closures in an easy and very straight-forward way.

For instance:

// assuming you have your un-sorted elements on $elements
// and the customized order on $order

usort( $elements, function($a, $b) use ($order){
    $a_index = array_search($a->ID, $order);
    $b_index = array_search($b->ID, $order);
    if ( $a_index > $b_index ) return 1;
    if ( $a_index > $b_index ) return -1;
    return 0;
});

AJAX y WordPress, de la manera correcta

Hay múltiples formas de implementar interacciones en AJAX con WordPress… muchas son malas, otras son horribles, algunas profundamente aberrantes y unas pocas son correctas.

En el grupo de las malas, horribles y aberrantes, encontramos todos aquellos métodos que tienen que ver con intentar hacer las cosas de algún modo ingenioso, y no aprovechando las funcionalidades propias de WordPress, por ejemplo: enviando una petición a un archivo en la carpeta de un plugin o tema o capturando parámetros al descubierto.

Los métodos correctos, por otra parte, se integran armoniosamente con WordPress y permiten utilizar sus características propias para facilitar el desarrollo y el funcionamiento de estas interacciones. En este sentido, probablemente la mejor forma de implementar peticiones AJAX es a través de /wp-admin/admin-ajax.php, ya que esto presenta varias ventajas:

Continue reading “AJAX y WordPress, de la manera correcta”