Имеется сайт на WP, у которого есть тысячи кастомных записей, и почти у каждой записи есть ACF поле VIN.
По сути, это VIN номер автомобиля, и хранится он в виде W1K253???1???????, W1N253???1??????? и т.д.
Вопросительные знаки означают, что там может быть любое числовое или буквенное значение, но не более количества вопросительных знаков. Так же, в разных моделях ТС вопросительные знаки могут находится в разных частях VIN номера, т.е. единого шаблона поиска у нас нету.
Нам нужно сделать поиск по этому полю, при том, что пользователь будет вводить полный вин номер своей машины, например, W1K25312311234567, и по этому коду, должны выйти записи, где есть такое: W1K253???1???????
Пробовал сделать так, он мне выдал вообще все записи:
$vin_regex = str_replace(array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'), '.', $vin_regex);
$meta_query = array(
array(
'key' => 'vin',
'value' => $vin_regex,
'compare' => 'REGEXP',
),
);
$args = array(
'post_type' => 'product',
'posts_per_page' => 10,
'paged' => $paged,
'meta_query' => $meta_query,
);
$query = new WP_Query($args);
Пробовал так, результат нулевой
$query = "
SELECT DISTINCT p.ID
FROM {$wpdb->posts} p
INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
WHERE p.post_type = 'product'
AND p.post_status = 'publish'
AND pm.meta_key = 'vin'
AND pm.meta_value LIKE REPLACE(%s, '?', '_')
LIMIT 10 OFFSET %d
";
$results = $wpdb->get_col($wpdb->prepare($query, $vin_input, $offset));
Может кто-то с таким уже сталкивался и есть решение?