Have you var_dump
ed $location
?
WP_Query
‘s meta_query
uses the class WP_Meta_Query
, which automatically appends and prepends ‘%’ to any string passed to it:
// 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;
// ...
}
So maybe try using (string) $location
as the sql statement is prepared, and expecting a string — that’s what the %s
means in the line $where = $wpdb->prepare( '%s', $meta_value );
. You can cast your variable to a string like this:
$location = (string) preg_replace('/^-|-$|[^-a-zA-Z0-9]/', '', $_GET['location']);