web-dev-qa-db-fra.com

WP_Query meta_query où la méta-valeur se termine dans l'espace

J'exécute une requête WP_Query standard sur un site Web de propriété et je souhaite trouver toutes les propriétés dont le code postal commence par "SC1". Dans la méta-requête, faire un LIKE normal sur le code postal fonctionne, mais renvoie également les propriétés avec le code postal SC13, ce qui n'est pas ce que je veux.

En conséquence, j'ai modifié ma méta requête comme suit:

array(
    'key'     => '_address_postcode',
    'value'   => 'SC1 ', // Notice the addition of the space
    'compare' => 'LIKE'
)

Cependant .. ça ne marche pas. J'ai creusé plus profondément et il semble que WordPress coupe les valeurs:

https://github.com/WordPress/WordPress/blob/af69f4ab1a0b44594b1f231c183f7a533575a893/wp-includes/class-wp-meta-query.php#L597

Avez-vous une idée de la façon dont je peux rechercher des méta-valeurs qui ont un espace à la fin? Je pensais faire quelque chose comme ça:

array(
    'key'     => '_address_postcode',
    'value'   => 'SC1 %',// Add a space then wildcard
    'compare' => 'LIKE'
)

... mais ça ne marche pas. Quelqu'un peut-il penser à un moyen de contourner cela: -S

3
BIOSTALL

Notez bien votre structure, mais voici une solution, en utilisant la comparaison RLIKE et un espace classe de caractères :

array(
    'key'     => '_address_postcode',
    'value'   => '^SC1[[:space:]]',    // Starts with 'SC1 '  
    'compare' => 'RLIKE'
)

Peut-être devriez-vous envisager d’ajuster les méta-valeurs, comme suggéré par @cybmeta?

Notez toutefois que les méta-requêtes peuvent être lentes, de sorte que les alternatives peuvent être meilleures ici (par exemple, en tant que taxonomie personnalisée?).

3
birgire