WP_QUERY META_QUERY其中元值以空格结束

时间:2016-11-15 作者:BIOSTALL

我正在物业网站上运行一个标准的WP\\U查询,我想查找所有邮政编码以“SC1”开头的物业。在元查询中,对邮政编码执行普通的LIKE操作是可行的,但它也会返回带有邮政编码SC13的属性,这不是我想要的。

因此,我将我的元查询更改为:

array(
    \'key\'     => \'_address_postcode\',
    \'value\'   => \'SC1 \', // Notice the addition of the space
    \'compare\' => \'LIKE\'
)
但是。。它不起作用了。我已经深入挖掘,WordPress似乎正在调整价值观:

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

你知道我如何搜索在末尾有空格的元值吗?我想过这样做:

array(
    \'key\'     => \'_address_postcode\',
    \'value\'   => \'SC1 %\',// Add a space then wildcard
    \'compare\' => \'LIKE\'
)
。。。但这行不通。有人能想出一个方法来解决这个问题吗

2 个回复
最合适的回答,由SO网友:birgire 整理而成

请注意您的结构,但这里有一种方法,使用RLIKE 比较和a空格character class:

array(
    \'key\'     => \'_address_postcode\',
    \'value\'   => \'^SC1[[:space:]]\',    // Starts with \'SC1 \'  
    \'compare\' => \'RLIKE\'
)
也许你应该考虑调整meta值,正如@cybmeta所建议的那样?

但请注意,元查询可能很慢,因此这里的替代方法可能更好(例如,作为自定义分类法?)。

SO网友:Mostafa Soufi

您可以使用  在元查询中。

array(
    \'key\'     => \'_address_postcode\',
    \'value\'   => \'SC1 \',
    \'compare\' => \'RLIKE\'
)