Categorías: Tutoriales

Ordenar una consulta con query_posts en WordPress por un meta_value

Cuando trabajamos con consultas en WordPress, es muy probable que necesitemos ordenar la salida de alguna forma diferente a la estándar que suele ser por fecha de forma que el más reciente aparezca primero y vayan apareciendo de forma sucesiva entradas más antiguas.

Si usamos WordPress como una API o como una plataforma de aplicaciones, más que como un CMS y más aún como un CMS orientado a blogs, este hecho es una auténtica necesidad.

Un caso muy frecuente es que queramos ordenar la salida en función de un meta valor. La diferencia entre una tabla normal de una base de datos y la estructura de la base de datos de WordPress formada por entradas y sus meta valores, hace que no podamos aplicar el ORDER BY directamente a la tabla entradas.

¿Cómo tenemos que hacerlo? Muy simple, pasándole a query_posts una serie de parámetros que lo indiquen, veamos un ejemplo autoexplicativo:

$query_args['order'] = "ASC";
$query_args['meta_key'] = "mi_meta_clave"; // elegimos sobre qué tipo de meta valor queremos ordenar
$query_args['orderby'] = "meta_value_num";
query_posts($query_args);

Como veis es sencillo, sólo tendremos que indicar:

  • El orden
  • Sobre qué meta_key ordenar, por ejemplo “precio” o la que uséis
  • Indicar en el orderby que queremos ordenar sobre el valor numérico de esa meta información

Con eso lo tenemos ya todo.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • Muy bueno el artículo.

    Estoy intentando crear un shortcode que me muestre los artículos de una fecha dada a otra. Es que quiero presentar los artículos de un mes, con el número de comentarios.

    Lo único que he conseguido es mostrar los artículos aleatorios con este código:
    $reciente = new WP_Query("cat=XX&showposts=2&orderby=rand");
    while($reciente->have_posts()) : $reciente->the_post();?>
    <a href="">

    Habría alguna manera de seleccionar una fecha de inicio y otra de finalización para motrar los posts (¿y sería posible mostrar el número de comentarios?) con este o como el otro código.

    Muchas gracias por todo y ánimo con el proyecto.

    • Son dos cosas diferentes.

      Lo de mostrar el número de comentarios es independiente de la consulta, puedes hacer usar: http://codex.wordpress.org/Function_Reference/get_comments

      Para el tema de las fechas, deberías usar una meta query dentro:
      $query = new WP_Query (
      array(
      'posts_per_page' => 4,
      'meta_query' => array(
      array(
      'key' => 'date_key_name',
      'value' => date('Y-m-d'),
      'compare' => '>=',
      )
      )
      )
      );

      Con eso lo tendrías.

      • Muchas gracias. No soy programador y me perdía con tantas opciones que tiene wordpres.
        Un saludo fuerte y repito, muchas gracias.

          • Gracias lo tendré en cuenta. Por ahora mi idea de negocio está en fases iniciales y el presupuesto es muy limitado, por eso tengo que ingeniármelas para desarrollarlo por mi cuenta. Muchas gracias por todo.

          • Pues ya sabes, cualquier duda simple por aquí y si quieres algo más nos preguntas en CODECTION y te lo averiguamos.

          • Hola Javier, esta clarísima tu explicación.
            Estoy trabando con algo y te pido lo analices.
            Tengo una columna con los likes de Facebook guardados (file_get_contents('http://graph.facebook.com/?id='.$permalink);)

            y llamo el query:

            $query_args['order'] = "ASC";
            $query_args['meta_key'] = "facebook_likes";
            $query_args['orderby'] = "meta_value";
            query_posts($query_args);

            pero no los ordena

          • ¿Has probado a hacer lo mismo con un WP_Query?

            Normalmente da menos problemas y está más recomendado que hacerlo con query_posts

  • Tengo un blog hecho en wordpress, donde indico esos valores de query_posts, lo que quiero lograr hacer es realizar entradas en distintas paginas

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace