Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Ordenar un listado de post a voluntad mediante campos personalizados en WordPress

Imago voragine.net

Desde la versión 2.8 de WordPress existe el valor meta_value_num para la opción orderby de la función query_posts; con ella podemos ordenar un listado de post que extraigamos de la base de datos mediante query_posts utilizando un campo personalizado al que debemos asignar un valor numérico. Es el equivalente al orden de un tipo de post (post types) jerárquico como las páginas.

Por ejemplo, vamos a formar un listado de entradas de la categoría con identificador ID y que contengan el campo personalizado «orden», y vamos a ordenarlo según el valor numérico de ese campo:

<?php
 $categoryID = "ID"; // sustituir ID por el ID de la categoría
 query_posts("cat=$categoryID&meta_key=orden&orderby=meta_value_num&order=ASC");
 if ( have_posts() ) :
    while ( have_posts() ) : the_post();
      // Aquí el código para cada entrada del listado...
    endwhile;
 else:
 endif;
 wp_reset_query();
?>

8 comentarios

    • Por Daniel

    Hola
    En teoria si pasas ese contexto en la querystring en la URL tambien deberia ordenarlos, pero NO, no lo ordena.

    Intentalo añadiendo en la url de la categoria:
    ?meta_key=orden&orderby=meta_value_num&order=ASC

    Veras que no,

    Sigo buscando soluciones a este tema,

    Saludos,

  1. Estás en lo cierto Daniel, hay parámetros de la query de WordPress que no funcionan en la URL. ¿Por qué? No lo tengo muy claro: aunque sería lógico que lo hicieran, no lo hacen.

    Me he enfrentado a ese problema varias veces a la hora de programar un buscador con más opciones que las que trae el de WordPress. Siempre he tenido que optar por usar taxonomías, con las que el querystring de la URL funciona mejor.

    • Por Marina •

    Hola!
    tengo una web con eventos que necesitaria ordenar por fecha de evento y no por fecha de publicación, podría hacerlo con los campos personalizados? Gracias!

    1. Hola Marina, en principio sí, puedes ordenar entradas con campos personalizados sin problema; puedes hacerlo creando campos personalizados con valores numéricos o alfabéticos, como prefieras.

      Para armar la query puedes usar query_posts o WP_query, con lo que te sientas más cómoda. Los parámetros son los mismos para las dos funciones.

        • Por Marina •

        Muchas gracias por la respuesta!!!

    • Por Hugo

    Hola. soy un completo lego en lo que a codigo se refiere. tengo un sitio de enentos en wordpress y quiero que las entradas (eventos) mas proximas en su fecha aparezcan primero. entiendo que se pueden usar custom fiel, pero no se donde introducir el codigo. Por favro agradecería una mano si tienen tiempo. Saludos!

    1. Hola Hugo,

      este código está obsoleto. Mira la documentación de WordPress para armar un loop que se ordene según custom fields. También te puede ser útil esta entrada sobre cómo ordenar un loop según múltiples criterios.

×

Responder al comentario de Hugo

*
*

 

Un trackback

  • 6.000 km » Blog Archive » Ordenando las localizaciones

    […] ocupado (gracias a las posibilidades que permiten ahora wordpress y los campos personalizados, y gracias a vorágine.net). Alguna de ellas nos ha resultado dificil de cuantificar, como el soterramiento de la M30 o el AVE […]