How to sort CPT posts in Elementor Loop Grid by custom order? - ilustracion

Ordenar CPT en Elementor Loop Grid: guía completa

Para ordenar posts personalizados Elementor en el Loop Grid, la vía más directa es usar el Custom Query Filter de Elementor Pro: asignás un Query ID al widget, enganchás una función PHP con elementor/query/{query_id}, y pasás los parámetros meta_key y orderby a la consulta. Sin código, la opción más práctica es el plugin Real Custom Post Order o usar Menu Order con drag-and-drop.

En 30 segundos

  • Elementor Loop Grid tiene 6 opciones de orden nativas: Fecha, Título, Menu Order, Última modificación, Comentarios y Aleatorio.
  • Para ordenar por campo personalizado (ACF, meta field) necesitás el Custom Query Filter de Elementor Pro con código PHP.
  • El plugin Real Custom Post Order te da drag-and-drop sin código, compatible con Elementor Pro.
  • Al ordenar por campo numérico usá meta_value_num, no meta_value, o el orden no va a funcionar bien.
  • El Query ID en el widget Loop Grid tiene que coincidir exactamente con el nombre que usás en el add_action, si no, el filtro no se dispara.

¿Por qué no puedo ordenar por campos personalizados en Elementor?

El widget Loop Grid de Elementor Pro es uno de los más útiles que existe para armar listados dinámicos de Custom Post Types. Pero tiene una limitación que te encontrás casi enseguida: en la sección Query del widget, el menú «Order by» solo te ofrece seis opciones fijas. Según la documentación oficial de Elementor, esas opciones son: Fecha, Título, Menu Order, Última modificación, Comentarios y Aleatorio.

Si tenés un CPT de eventos con un campo ACF fecha_evento, o un CPT de productos artesanales con precio_personalizado, o simplemente querés que ciertos posts aparezcan primero porque tienen un checkbox «destacado» activado, te quedás sin opciones desde la interfaz. No hay un campo «ordenar por meta field» en el panel. Punto.

¿Y por qué no lo incluyen? Probablemente porque la interfaz se volvería compleja muy rápido (hay que especificar el nombre del meta, el tipo de dato, si es numérico o string), y Elementor prefiere mantenerla simple para el usuario promedio. Para los casos avanzados, la solución es el Custom Query Filter, que te da acceso directo a los argumentos del WP_Query antes de que se ejecute.

Ordenar Loop Grid por las opciones nativas

Antes de meterte con código, fijate si podés resolver el problema con lo que hay.

Menu Order es la opción más subestimada. Te permite ordenar los posts arrastrándolos en el editor de WordPress (con el plugin Real Custom Post Order o Post Types Order) y Elementor respeta ese orden si elegís «Menu Order» en el widget. Para catálogos chicos donde el cliente quiere control manual, esto zafa perfectamente.

La configuración en el widget es directa: Loop Grid > Query > Order By > Menu Order. Y el orden: ASC. No necesitás nada más. Esto se conecta con lo que analizamos en guía completa de Elementor para WordPress.

Solución 1: Custom Query Filter con código PHP

Esta es la solución «de verdad» para ordenar posts personalizados Elementor por cualquier meta field. La documentación para desarrolladores de Elementor explica exactamente cómo funciona el hook.

El proceso tiene tres pasos:

Paso 1: Asignar el Query ID

En el widget Loop Grid, andá a la sección Query y buscá el campo «Query ID». Ponele un nombre sin espacios, por ejemplo mis_eventos. Este nombre es el conector entre el widget y tu función PHP.

Paso 2: Crear la función PHP

Pegá esto en functions.php de tu tema hijo, o mejor aún, en el plugin Code Snippets para no perderlo en la próxima actualización:

add_action( 'elementor/query/mis_eventos', function( $query ) {
 $query->set( 'meta_key', 'fecha_evento' );
 $query->set( 'orderby', 'meta_value' );
 $query->set( 'order', 'ASC' );
} );

Si el campo es numérico (precio, stock, edad), cambiá meta_value por meta_value_num. Esto es crítico: si ordenás un precio guardado como «1500» con meta_value, el orden va a ser alfabético (1, 10, 100, 1500, 2, 20…), no numérico. Cualquiera que haya sufrido ese bug sabe lo frustrante que es.

Paso 3: Verificar

Limpiá la caché (tanto de WordPress como de cualquier plugin de caché) y revisá el Loop Grid. Si el orden no cambió, verificá que el Query ID en el widget coincida exactamente con el nombre en el add_action. Un solo caracter de diferencia y el hook no se dispara (spoiler: mayúsculas también importan).

Solución 2: Ordenar por campo ACF

Advanced Custom Fields guarda los valores en la tabla wp_postmeta, igual que cualquier otro meta field de WordPress. Eso significa que el Custom Query Filter funciona exactamente igual con ACF.

Lo que sí cambia es cómo ACF guarda ciertos tipos de datos. Los campos de tipo Fecha en ACF se guardan en formato YYYYMMDD (ejemplo: 20260315), que es ordenable como string sin problemas. Los campos de tipo Número se guardan como valor numérico, así que usá meta_value_num. En impacto de Elementor en el SEO profundizamos sobre esto.

Ponele que tenés eventos con un campo ACF llamado fecha_inicio (tipo Date). El código sería:

add_action( 'elementor/query/mis_eventos', function( $query ) {
 $query->set( 'meta_key', 'fecha_inicio' );
 $query->set( 'orderby', 'meta_value' );
 $query->set( 'order', 'ASC' );
 // Solo mostrar eventos con fecha cargada
 $query->set( 'meta_query', [
 [
 'key' => 'fecha_inicio',
 'compare' => 'EXISTS',
 ]
 ] );
} );

El meta_query con EXISTS es opcional pero útil: evita que posts sin el campo cargado aparezcan al principio del listado con un valor vacío.

Para campos ACF de tipo Checkbox (por ejemplo «producto_destacado» = 1), la sintaxis cambia un poco. Este tutorial de Daveden explica cómo priorizar posts con checkbox activo primero, y moverlos al final cuando se desactiva, usando orderby => array('meta_value' => 'ASC', 'date' => 'DESC') para tener doble criterio de orden.

Plugins recomendados para ordenar sin código

PluginMétodoRequiere códigoCompatible Elementor ProPrecio
Real Custom Post OrderDrag-and-drop en adminNoSí (con Menu Order)Gratis
Post Types OrderDrag-and-drop + auto-sortNoSí (con Menu Order)Gratis / Pro USD 19
Advanced Post QueriesUI para meta_key y orderbyNoUSD 29/año
Query MonitorDebug de queries (no ordena)NoHerramienta de debugGratis
ordenar posts personalizados elementor diagrama explicativo

Real Custom Post Order es el más sencillo para clientes que necesitan control manual: instalás, habilitás el CPT en la configuración del plugin, y en el listado de posts del admin podés arrastrar para reordenar. Elementor respeta ese orden cuando usás «Menu Order» en el widget.

Post Types Order va un paso más allá: tiene opción de auto-sort al publicar un post, así el nuevo ítem entra en la posición correcta según criterios que vos definís.

Advanced Post Queries es la opción para quien quiere el poder del Custom Query Filter pero sin escribir PHP. Agrega campos en el widget de Elementor para especificar meta_key, orderby y tipo de campo. El tema es que agrega dependencia de un plugin comercial que no es de Elementor, así que evalualo bien antes de usarlo en un proyecto cliente.

Errores comunes al implementar custom order

El Query ID no coincide. Este es el error número uno. El campo en el widget dice Mis_Eventos y el add_action dice mis_eventos. Elementor es case-sensitive acá: no va a funcionar. Siempre usá minúsculas y sin espacios, y copiá-pegá el nombre en vez de escribirlo dos veces a mano.

Usar meta_value para campos numéricos. Ya lo mencioné, pero me lo preguntaron suficientes veces como para repetirlo: si tu campo guarda números (precios, porcentajes, cantidades), usá meta_value_num. Con meta_value, «9» viene después de «100» porque el orden es alfabético. Complementá con alternativas al Loop Grid de Elementor.

Olvidar limpiar la caché. Implementás el código, recargás y nada cambia. Antes de concluir que el código está mal, limpiá la caché de tu plugin (WP Rocket, LiteSpeed Cache, lo que uses) y también la de Elementor desde Herramientas > Regenerar archivos CSS y Limpiar caché.

Nombre de función duplicado. Si tenés dos funciones con el mismo nombre en functions.php, PHP larga un fatal error y WordPress queda en blanco. Si copiás código de Stack Overflow, cambiá el nombre de la función. O mejor, usá el formato de función anónima (como en los ejemplos de arriba) que no tiene nombre y no puede duplicarse.

Posts sin el meta field quedan en el orden equivocado. Cuando hacés meta_key sin un meta_query de EXISTS, los posts que no tienen ese campo se comportan raro: algunos aparecen al inicio, otros al final, dependiendo de la versión de MySQL. Siempre agregá la condición EXISTS si no todos los posts van a tener el campo.

Integración con WooCommerce: ordenar productos

Para WooCommerce el enfoque es el mismo pero los meta fields cambian. Los productos guardan su precio en _price y _regular_price (con guión bajo al inicio, que es convención de campos privados de WP). Para ordenar por precio:

add_action( 'elementor/query/mis_productos', function( $query ) {
 $query->set( 'meta_key', '_price' );
 $query->set( 'orderby', 'meta_value_num' );
 $query->set( 'order', 'ASC' );
} );

Para ordenar por rating de WooCommerce, el meta field es _wc_average_rating y también es numérico.

Ojo: WooCommerce tiene su propio sistema de ordenamiento en páginas de tienda (por popularidad, precio, etc.) que no pasa por el Loop Grid. El Loop Grid es para listados custom que vos armás, no para la página de shop nativa. Si necesitás ordenar la página de tienda, eso se maneja distinto. Para más detalles técnicos, mirá comunidad oficial de WordPress.

Qué está confirmado y qué no

Confirmado

  • El Custom Query Filter con elementor/query/{id} es funcionalidad oficial de Elementor Pro, documentada y estable desde hace varios años.
  • Real Custom Post Order es compatible con Elementor Pro usando Menu Order (verificado por la comunidad en el repositorio de WordPress).
  • El formato de fecha ACF YYYYMMDD es ordenable como meta_value sin conversiones adicionales.
  • La diferencia entre meta_value y meta_value_num afecta el resultado de forma predecible y documentada por WordPress.

No confirmado / a verificar

  • Advanced Post Queries: la compatibilidad con versiones futuras de Elementor Pro no está garantizada. Antes de usarlo en producción, testeá con tu versión exacta.
  • Ordenar por múltiples meta fields simultáneos: funciona con WP_Query estándar, pero el comportamiento con el Loop Grid de Elementor puede variar según la versión. Testeá antes de comprometerte con el cliente.

Preguntas Frecuentes

¿Cómo ordeno posts personalizados en Elementor Loop Grid?

Para campos custom necesitás el Custom Query Filter de Elementor Pro. Asignás un Query ID al widget Loop Grid, y creás una función PHP con add_action('elementor/query/tu_id', function($query){...}) donde configurás meta_key, orderby y order. Sin código, la opción es usar drag-and-drop con el plugin Real Custom Post Order combinado con la opción «Menu Order» del widget.

¿Se puede ordenar un Loop Grid de Elementor por campo personalizado sin código?

Sí, con plugins como Real Custom Post Order (gratis) o Post Types Order. Estos plugins te dejan arrastrar los posts en el admin de WordPress, y Elementor respeta ese orden cuando configurás «Menu Order» en el widget. La limitación es que el orden es manual, no automático por el valor de un campo.

¿Cómo uso meta_key para ordenar posts en Elementor?

En el Custom Query Filter, usás $query->set('meta_key', 'nombre_del_campo') y $query->set('orderby', 'meta_value') (o meta_value_num para campos numéricos). El nombre del campo tiene que coincidir exactamente con el que ves en la base de datos, incluyendo guiones bajos o prefijos.

¿Puedo ordenar Loop Grid por ACF sin código?

ACF solo, sin código, no agrega opciones de ordenamiento al Loop Grid de Elementor. Necesitás el Custom Query Filter o un plugin de ordenamiento manual como Real Custom Post Order. El plugin Advanced Post Queries (pago) agrega una UI para configurar el meta_key sin escribir PHP, pero sigue requiriendo que conozcas el nombre exacto del campo ACF.

¿Qué diferencia hay entre meta_value y meta_value_num?

meta_value ordena el campo como texto (orden alfabético), y meta_value_num lo ordena como número. Si tenés precios como 100, 9, 1500, con meta_value el orden sería 100, 1500, 9 (alfabético). Con meta_value_num sería 9, 100, 1500 (numérico correcto). Para fechas en formato YYYYMMDD de ACF, meta_value funciona bien porque el formato es ordenable como string.

Conclusión

Elementor no va a agregar soporte nativo para ordenar por meta fields en el panel de configuración del Loop Grid, al menos no en el corto plazo. El Custom Query Filter existe exactamente para esto: te da acceso completo al WP_Query antes de que se ejecute, y en combinación con meta_key y orderby podés lograr prácticamente cualquier orden que necesites.

Si el proyecto no justifica código, Real Custom Post Order + Menu Order resuelve el 80% de los casos de uso con drag-and-drop. Subís los posts, ordenás en el admin, listo.

El punto crítico que más falla en la práctica es el Query ID, el tipo de meta_value (string vs num), y la caché sin limpiar. Resolvé esos tres primero y el resto cae solo. Y si el sitio está en un hosting que soporta LiteSpeed Cache (como el hosting WordPress de Donweb), acordate de limpiar la caché de LiteSpeed cuando probás cambios en queries, porque puede estar sirviendo versiones viejas sin que te des cuenta.

Fuentes

Volver a

Novedades

Publicaciones relacionadas