Ciber Geek >

php

ORDER BY avanzado para loops con WordPress (usando WP_Query)

Todo en WordPress es sencillo, hasta que empezamos a hacer cosas mas especificas, y no es porque no tengamos las herramientas para hacerlo, sino porque muchas veces no las conocemos y terminamos escribiendo algún código ninja para salir del paso, y no digo que esté mal, pero en incontables ocasiones terminamos reinventando la rueda, y no de la mejor manera.

reinventar la rueda

Reinventando la rueda

Uno de éstos casos es cuando usamos la clase WP_Query para crear loops customizados, o como deseen llamarlos. En ésta ocasión la idea es ahondar sobre el orden de los posts que se obtienen en el Loop.

WP_Query orderby

En éste ejemplo usamos el parámetro ORDER BY, y elegimos los parámetros “author” y “title”, o sea, ordenamos primero por autor, y si hay 2 posts que tienen el mismo autor, entonces el titulo es el que “decide” el orden.

$args = array( 'orderby' => 'author title', 'order' => 'DESC' );

$query = new WP_Query($args);

El resultado de ésta query es el siguiente:

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish')  ORDER BY wp_posts.post_author,wp_posts.post_title DESC LIMIT 0, 10

Como ven, en la query generada vemos que se utilizan las columnas “post_author” y “post_title” en el ORDER BY, ésto tiene algunas limitaciones, como por ejemplo, que no se puede ordenar en forma ascendente en una columna y descendente en la otra.

Además, existen casos en lo que se requiere ordenar por día y por otra columna, por autor, por dar un ejemplo, en ése caso hay un problema, si usamos el “orderby” con el parámetro “date”, el segundo parámetro no tendría sentido (en la mayoría de los casos), ya que el parámetro “date” se corresponde con la fecha del post, que tiene incluido la hora, minutos y segundos, por lo tanto es raro que 2 posts tengan la misma fecha, aunque hay casos en los que sí, como cuando los posts fueron migrados a WordPress y los datos de la fecha estaban incompletos.

Filtro posts_orderby

Con el filtro “posts_orderby” lo que se logra es modificar la parte del ORDER_BY de la query que genera WP_Query, su uso es muy sencillo.

add_filter('posts_orderby', 'posts_orderby');

function posts_orderby($orderby_for_query) {
$orderby_for_query = "LEFT(wp_posts.post_date, 10) DESC, wp_posts.post_title ASC";
return $orderby_for_query;
}

$args = ' ';
$the_query = new WP_Query($args);
var_dump($the_query->request);

El resultado del “var_dump” es el siguiente.

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') ORDER BY LEFT(wp_posts.post_date, 10) DESC, wp_posts.post_title ASC LIMIT 0, 10

Como ven, el filtro modificó la parte del ORDER_BY con lo que añadimos en la funcion “posts_orderby”. La función LEFT, es una función de MySQL, lo que hace es obtener una subcadena de una cadena, en éste caso la idea es reducir la columna “post_date” para obtener solo la parte del año, mes y día, de ésa forma se logra orden por día, y por el otro atributo que se desee.

Si tienen varias queries, pueden “remover el filtro”, para evitar que afecte a otros loops.

remove_filter( 'posts_orderby', 'posts_orderby' );

Lo ideal, es llamar a ésta función después de crear la query.

Como aclaración, ésto también funciona en las queries por defecto de WordPress (en las que no es necesario crear una instancia de WP_Query).

Empezando con la API de MercadoLibre

Primeros pasos con la API de MercadoLibre

Hace bastante MELI introdujo una nueva API REST que devuelve los resultados en JSON, lo que la hace bastante mejor que la anterior que funcionaba con XML, al menos para mi gusto.

Ahora vamos a ver algunas llamadas básicas para comenzar a comprender como funciona y luego realizar una pequeña tienda utilizando CodeIgniter (PHP).

La API cuenta con llamadas publicas y privadas, para las primeras no necesitamos estar logueados en MELI (no se necesita cuenta), en el caso de las privadas si necesitamos estar logueado, ya que las llamadas permiten acceder a datos del usuario.

En algunas de las llamadas se debe añadir como parámetro el sitio de MercadoLibre del que se quieren obtener los resultados, pueden ver un listado en la siguiente dirección.

https://api.mercadolibre.com/sites/

Llamadas publicas

Una de las llamadas publicas permite realizar búsquedas, la URL a la que se debe realizar es la siguiente, observen que el tercer segmento de la URL incluye el sitio de MercadoLibre del que se quieren obtener los resultados, MLA corresponde a MercadoLibre Argentina.

https://api.mercadolibre.com/sites/MLA/search?q=NOMBRE DEL PRODUCTO

El nombre del producto, la query, no permite espacios (en PHP), por lo tanto si se trata de un producto compuesto por varias palabras se deben reemplazar los espacios por signos más (+), aunque si la llamada la hacemos directamente desde el navegador este se encarga automáticamente de hacerlo, por lo tanto la URL quedaría así.

https://api.mercadolibre.com/sites/MLA/search?q=NOMBRE+DEL+PRODUCTO

Si prueban de ingresar la URL en el navegador verán que pueden ver lo que devuelve la API, aunque de manera “reducida”, para ver la respuesta completa deben hacer clic en el botón que dice “expand all”.

Además, los resultado en la parte derecha muestra información sobre el resultado de la llamada realizada, la “API description” es una descripción breve del contenido que devuelve la API, uno de los mas importantes es el campo “Attributes” que nos describe cada uno de los atributos del objeto JSON devuelto. En “Allowed methods” podemos encontrarnos con distintas opciones para realizar llamadas a la misma API para obtener resultados mas específicos, mediante el agregado de parámetros. En “Related resources” nos encontramos con llamadas que están relacionadas con la cual realizamos.

 

En los próximos posts hablaremos sobre el tema de aplicación de filtros para las búsquedas y otras llamadas, mientras tanto pueden acceder a mercadolibre.io para investigar por su cuenta.

Otros posts sobre la API de MELI.

Filtrar búsquedas en la API de MercadoLibre

PHP vs Ruby vs Python

Infografia PHP vs Ruby vs Python

Una infografía en inglés que cubre varios aspectos de estos lenguajes que tienen una gran presencia en la Web, de los 3 yo he probado PHP y Python, Ruby solo he leído código pero nunca he hecho nada útil.

Entre los datos presentados se encuentra la facilidad para el aprendizaje, popularidad, ofertas de trabajo, cantidad de desarrolladores, expresividad (cantidad de lineas de código necesarias para resolver un problema), rapidez promedio y otros datos.

PHP

PHP es el lenguaje mas popular de los 3, WordPress esta codificado con dicho lenguaje, al igual que la Wikipedia y Facebook, aunque en Facebook usan un “traductor” a C++ para mejorar la performance.

Algo atractivo de PHP es la cantidad de codigo, herramientas disponibles (frameworks, CMSs) y documentación, en español.

Si están interesados en dedicarse al desarrollo freelance PHP es la mejor opción, ya que posee el mayor mercado laboral, pero también mayor competencia.

Python

Python debe su popularidad a la limpieza de su código y a su expresividad, también un poco a Google y la NASA que lo usan en muchos de sus proyectos, sin dudas 2 instituciones que siempre atraen la mirada Geek.

Entre los 3 lenguajes es el mas rápido y mi favorito por lo cual no quiero opinar mucho, mi imparcialidad se ve afectada =p.

Una característica es la cantidad de librerías que posee, algo que muchas veces se toma a modo de chiste diciendo que los programadores en Python solo tienen que importar librerías.

Algo que merece la pena mencionar es el excelente framework llamado Django, sin lugar a duda uno de los mas maduros que andan dando vueltas.

Ruby

Ruby es el lenguaje detrás de nada mas y nada menos que Groupon y Twiiter, aunque a Twitter probablemente ya no use el framework Ruby on Rails.

Verdaderamente no tengo mucha experiencia con éste lenguaje, aunque tiene similitudes con Smalltalk, que para quienes no saben es el lenguaje con el que se comenzó con el paradigma de orientación a objetos, y solo como dato anecdotico fue creado por Xerox, la empresa que la mayoria conoce por sus fotocopiadores y que verdaderamente merece un post aparte.

 

php vs python vs ruby

Infografia PHP vs Python vs Ruby

Via geekndev