我在页面上有一个带有位置字段的搜索属性表单,我使用以下元查询来处理搜索;
$location = preg_replace(\'/^-|-$|[^-a-zA-Z0-9]/\', \'\', $_GET[\'location\']);
$meta_query = array( \'relation\' => \'AND\' );
if($location) {
$meta_query[] = array(
\'relation\' => \'OR\',
array(
\'key\' => \'property_country\',
\'value\' => $location,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'property_city\',
\'value\' => $location,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'property_location\',
\'value\' => $location,
\'compare\' => \'LIKE\'
)
);
}
但是,如果搜索新的,效果很好,但如果搜索纽约,则不会返回任何结果。如何解决此问题?是否有方法在
$location
? 我尝试添加
\'*\'.$location.\'*\'
但那没什么用。
SO网友:FaCE
你有吗var_dump
教育部$location
?
WP_Query
\'smeta_query
使用类WP_Meta_Query
, 它会自动将“%”附加到传递给它的任何字符串的前面:
// From wp-includes/class-wp-meta-query.php:610
switch ( $meta_compare ) {
// ...
case \'LIKE\' :
case \'NOT LIKE\' :
$meta_value = \'%\' . $wpdb->esc_like( $meta_value ) . \'%\';
$where = $wpdb->prepare( \'%s\', $meta_value );
break;
// ...
}
所以也许可以尝试使用
(string) $location
当sql语句准备好时,需要一个字符串——这就是
%s
行中的平均值
$where = $wpdb->prepare( \'%s\', $meta_value );
. 您可以将变量强制转换为如下字符串:
$location = (string) preg_replace(\'/^-|-$|[^-a-zA-Z0-9]/\', \'\', $_GET[\'location\']);