Consulta meta con patrón de inicio de cadena
Tengo una consulta WP_Query personalizada con el siguiente meta_query:
$meta_query = array();
$meta_query['relation'] = 'AND';
if(!empty($postcode)) {
$meta_query[] = array(
'key' => 'postcode',
'value' => $postcode,
'compare' => 'LIKE'
);
}
if(!empty($email)) {
$meta_query[] = array(
'key' => 'email_address',
'value' => $email,
'compare' => 'LIKE'
);
}
El problema con esto es que WordPress envuelve cada valor meta en %%
para usarlo como parte de la comparación LIKE
en la consulta, por ejemplo WHERE meta_value LIKE '%hello@example.com%'
¿Es posible configurar un meta_query para que solo se use un signo de porcentaje, para poder verificar si un valor comienza o termina con una frase? Por ejemplo WHERE meta_value LIKE 'hello@%'

Podrías probar la versión con REGEXP
:
'meta_query' => array(
array(
'key' => 'email_address',
'value' => '^hello@',
'compare' => 'REGEXP',
)
)
donde ^
coincide con el inicio de una cadena.
Puedes consultar la referencia de MYSQL sobre REGEXP
aquí para más información.
Ten en cuenta que estos son los valores posibles del parámetro compare
en meta queries:
'=', '!=', '>', '>=', '<', '<=',
'LIKE', 'NOT LIKE','IN', 'NOT IN',
'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS',
'REGEXP', 'NOT REGEXP', 'RLIKE'
según el código fuente de WordPress 3.9.2.
De la referencia de MYSQL:
Nombre Descripción
------------------------------------------------------
NOT REGEXP Negación de REGEXP
REGEXP Coincidencia de patrones usando expresiones regulares
RLIKE Sinónimo de REGEXP

Excelente material, muchas gracias. Es una pena que no incluyan REGEXP
como un valor de comparación válido en la documentación (De http://codex.wordpress.org/Class_Reference/WP_Meta_Query Los valores posibles son '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' (solo en WP >= 3.5), y 'NOT EXISTS' (también solo en WP >= 3.5). El valor predeterminado es '='.
)

Actualicé el Codex con estos parámetros adicionales: REGEXP
, NOT REGEXP
y RLIKE
.
