Índice de contenidos
Ordenar post utilizando campos personalizados
En este artículo aprenderemos a ordenar post utilizando campos personalizados, para ello vamos a crear una consulta wp_query que nos devuelva las entradas o post ordenados por un campo personalizado o custom field.
WordPress nos permite asignar campos personalizados a una entrada. Este tipo de información se conoce como metadatos. Los metadatos se almacenan en la tabla de la base de datos, postmeta en cuatro campos:
- meta_id: Un ID único por cada entrada.
- post_id: El ID de la entrada para estos metadatos.
- meta_key: El nombre de la clave (Key).
- meta_value: El valor asociado a dicha clave (Value).
La clave(key) es el nombre del campo personalizado, mientras que el valor es la información que hemos asignado a una entrada para dicha clave.
Si recuerdas la entrada anterior donde explicaba como crear custom fields o campos personalizados, en el ejemplo de juguetes: podemos diferenciar nuestra clave o key: Fabricante y su valor: Disney.
La clave Fabricante es compartida por todas las entradas de tipo juguete mientras que su valor Disney es individual a uno o varios post que cumplan que el juguete es fabricado por Disney.
Estructura de la consulta wp-query
<?php $the_query = new WP_Query(array( 'post_type' => 'juguete', 'posts_per_page' => -1, 'meta_key' => 'Fabricante', 'orderby' => 'meta_value', 'order' => 'DESC' )); ?>
meta_key: la clave de nuestro campo personalizado.
orderby: le decimos que ordene por el valor asignado a cada entrada en su campo personalizado Fabricante.
order: si queremos que sea descendente o ascendente.
Consideraciones sobre orderby
Si prestas atención al ejemplo verás que he utilizado orderby, orderby puede tener diferentes valores: meta_value. Para que funcione debes añadir el meta_key en los argumentos de la consulta ya que siempre configura el orden respecto a una clave de un campo personalizado.
orderby se puede utilizar para campos numéricos, campos que contienen fechas…
orderby => meta_value_num
orderby => meta_value_datatime
Ejemplo ordenar productos por precio
En nuestro WordPress hemos creado un custom type llamado: producto, a cada entrada personalizada tipo producto le hemos añadido un campo personalizado que hemos llamado precio. Queremos ordenar todas las entradas personalizadas de productos según el precio.
Precio es una campo numérico.
$args = array( 'post_type' => 'producto', 'orderby' => 'meta_value_num', 'meta_key' => 'precio', ); $query = new WP_Query( $args );
Ejemplo ordenar por múltiples campos
A partir de WordPress 4.0 podemos utilizar orderby con múltiples campos.
El siguiente ejemplo ordena los productos por precio de menor a mayor. Si los precios son iguales entonces ordena primero los post sobre productos con fecha más reciente.
$mi_consulta = new WP_Query( array( 'post_type' => 'producto', 'meta_key' => 'precio', 'orderby' => array( 'meta_value_num' => 'DESC', 'post_date' => 'ASC', ), ) );
Puedes crear consultas que ordenen por varios campos, que cumplan determinadas condiciones en los campos… Son consultas más elaboradas que veremos en otros artículos…
0 comentarios