У меня есть некоторая ситуационная проблема с meta_query. Поиск клиентов IV, но результат включен в частное (исходное слово является частным). Я хочу показать только включенный IV (числовой) пост. Мой поиск meta_query по заголовку, подзаголовку и описанию в пользовательском плагине. Я нашел REGEXP, но не смог найти правильный способ найти числовое значение Roam из заголовка, подзаголовка и описания.
Клиент может найти только Roma Numeric, также он может найти любые слова и т. д.
$args = array(
'numberposts' => -1,
'category' => 0,
'orderby' => 'post_date',
'order' => 'DESC',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'title',
'value' => $search_term,
'compare' => 'LIKE',
),
array(
'key' => 'sub-title',
'value' => $search_term,
'compare' => 'LIKE',
),
array(
'key' => 'description',
'value' => $search_term,
'compare' => 'LIKE',
)
),
'post_type' => 'gallery',
'post_status' => 'publish',
'suppress_filters' => true
);
$posts = get_posts($args, ARRAY_A);

Регулярное выражение должно включать римские числа следующим образом (при условии, что $search_term включает только запрошенное римское число:
$regEx = '/(' . strtoupper($search_term) . ')/g';
Я решил свою проблему, используя регулярное выражение для заголовка, описания и подзаголовка. Плохая идея все еще искать лучший ответ.
$tempFlag = false;
foreach (explode(" ", $description) as $temp) {
if (preg_match('/^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$/', $temp)) {
if (in_array($temp, $romeNumber)) {
$tempFlag = true;
}
}
}