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
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,
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.
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!
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.
Muchas gracias por la respuesta!!!
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!
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.