Saltar al contenido principal
Versión: 0.2.0-alpha

Sintaxis básica

Expression Lab utiliza el componente Symfony Expression Language como base para la evaluación de expresiones. Proporciona un Lenguaje de Dominio Específico (DSL) declarativo diseñado para consultar datos, aplicar transformaciones e interactuar con los servicios internos de WordPress sin necesidad de escribir scripts PHP directos.

¿Quieres profundizar más?

Consulta la documentación oficial de Symfony sobre The Expression Syntax para explorar detalles adicionales de la gramática base.


Descripción general del motor de expresiones​

El componente Symfony Expression Language compila cada expresión en un Árbol de Sintaxis Abstracta (AST). Aunque su diseño original se orienta solo a expresiones (evaluando un único valor de retorno sin estructuras iterativas convencionales como while o for), Expression Lab amplía el lenguaje base con una capa de scripting funcional y declarativo (prog[...], set[...], fn[...], map[...]).

Esto permite componer flujos de trabajo de múltiples pasos, gestionar variables de expresión y transformar colecciones restringiendo la evaluación a operadores y funciones registrados en el contexto.


Literales y tipos primitivos​

Expression Lab admite los tipos de datos primitivos estándar:

TipoSintaxisDescripción
Números42, 3.14, -10, 1e3Enteros y valores de punto flotante.
Cadenas'hola', "WordPress", "Texto con \"comillas\""Cadenas delimitadas con comillas simples o dobles.
Booleanostrue, falseLiterales booleanos (insensibles a mayúsculas/minúsculas).
NullnullRepresenta la ausencia de valor o valor nulo.

Escape de caracteres en cadenas​

Las cadenas de texto pueden delimitarse con comillas simples ('...') o dobles ("..."). Cuando necesites incluir comillas o barras invertidas dentro de una cadena, aplica las reglas estándar de escape:

  • Comillas simples ('...'): Escapa las comillas simples internas con una barra invertida (\'), por ejemplo: 'It\'s a test'.
  • Comillas dobles ("..."): Escapa las comillas dobles internas con una barra invertida (\"), por ejemplo: "Dijo \"Hola\"".
  • Barras invertidas literales: Escapa las barras invertidas con doble barra (\\), por ejemplo: 'C:\\Windows' o "ruta\\al\\archivo".
  • Consejo: Es posible alternar el tipo de comillas para evitar tener que escapar caracteres:
    • Comillas dobles para contener comillas simples: "It's a test"
    • Comillas simples para contener comillas dobles: 'Dijo "Hola"'

Colecciones y estructuras de datos​

Arrays (listas indexadas)​

Los arrays se declaran delimitando elementos separados por comas entre corchetes [...]:

[1, 2, 3, "cuatro", true]

Se accede a sus elementos mediante índices numéricos basados en cero:

users[0]

Objetos y mapas clave-valor​

Los mapas clave-valor se encierran entre llaves {...}:

{ id: 1, title: 'Entrada de Muestra', published: true }

El acceso a sus propiedades puede realizarse mediante notación de punto o corchetes:

post.title
post['title']

Operadores​

Expression Lab proporciona un conjunto completo de operadores aritméticos, lógicos, de comparación y manipulación de cadenas.

Operadores aritméticos​

OperadorSintaxisDescripción
+10 + 5Suma (evalúa a 15)
-10 - 5Resta (evalúa a 5)
*10 * 5Multiplicación (evalúa a 50)
/10 / 5División (evalúa a 2)
%10 % 3Módulo / Resto (evalúa a 1)
**2 ** 3Exponenciación (evalúa a 8)

Concatenación de cadenas​

El operador ~ (tilde) permite concatenar cadenas:

'Hola, ' ~ Users.current.data.display_name ~ '!'

Operadores de comparación​

OperadorSintaxisDescripción
==status == 'publish'Igualdad débil
===user_id === 1Igualdad estricta (tipo y valor)
!=post_type != 'revision'Desigualdad débil
!==role !== 'subscriber'Desigualdad estricta
<, >count > 10Menor que, mayor que
<=, >=memory <= 50Menor o igual que, mayor o igual que

Operadores lógicos​

OperadorSintaxisDescripción
and / &&is_admin and has_accessConjunción lógica (Y)
or / ||is_editor or is_adminDisyunción lógica (O)
not / !not is_draftNegación lógica (NO)

Operadores avanzados​

Operador ternario (condicion ? valor_si_verdadero : valor_si_falso)​

user.is_admin ? 'Administrador' : 'Usuario Estándar'

Operador de coalescencia nula (??)​

Devuelve el primer operando si está definido y no es null; de lo contrario, evalúa y devuelve el segundo operando:

post.meta['subtitle'] ?? 'Sin subtítulo disponible'

Operadores de pertenencia (in, not in)​

Comprueban si un valor está contenido dentro de un array o cadena:

'administrator' in Users.current.roles
'draft' not in ['publish', 'future', 'private']

Coincidencia con expresiones regulares (matches)​

Evalúa si una cadena coincide con un patrón regex estándar:

Users.current.data.user_email matches '/^[a-zA-Z0-9._%+-]+@example\\.com$/'

Invocación de métodos y encadenamiento​

Es posible invocar métodos en cualquier servicio, modelo o utilidad expuesta:

Options.get('active_plugins')

Los constructores de consultas admiten encadenamiento fluido:

Posts.where('post_status', 'publish').get()

Siguientes pasos​