Intereting Posts
Существует ли веб-служба XML, которая может получать сообщения, категории и другие данные с сайта? CSS-классы (необязательно) в меню не отображаются Получение библиотеки jQuery для работы в WordPress & Avada Почему ajax работает на одном сервере, а не на следующем? Default Nav Highlight Как удалить базу данных без использования какого-либо плагина? Предварительный просмотр настроек не обновляет значение get_option () правильно В wordpress, как отправлять разные электронные письма, когда я нажимаю на различные идентификаторы электронной почты wp_insert_user не работает для меня? Заголовок HTTP на конкретной странице – это приложение вместо текста Найдите, какая структура Permalink является лучшей родитель get_terms только для текущего продукта Сохранение данных о ценах продукта в базе данных Сеансы, которые не создаются правильно в пользовательской функции Как ссылаться на изображения в моем плагине, независимо от имени папки плагина

Как использовать WP_Query для получения диапазона сообщений с настраиваемыми полями, в которых есть числа с буквами?

То, что я пытаюсь сделать

Я использую WP_Query() для получения сообщений, основанных на их диапазоне, например:

 $args = array( 'numberposts' => -1, 'post_type' => 'page', 'posts_per_page' => -1, 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'parameters', 'value' => 'width', ), array( 'key' => 'value', 'value' => array( '22mm', '55mm' ), // Can this be done when I'm using NUMERIC and BETWEEN? 'type' => 'NUMERIC', 'compare' => 'BETWEEN' ) ) ); $the_query = new WP_Query( $args ); 

В БД

В базе данных мои значения хранятся в виде строк, то есть 22 мм , 55 мм и т. Д.

Вопрос

Как я могу задать запрос для поиска диапазона и игнорировать мм в 22 мм ?

Перехватите запрос на фильтр posts_where . Там вы можете сделать замену не числовых значений:

 preg_replace( "/[^0-9,.]/", "", $yourMeta ); 

Или в (общем) фрагменте кода:

 add_action( 'posts_where', 'wpse120784WhereDiameter', 100 ); function wpse120784WhereDiameter( $where ) { // If conditions here - only target the cases where we need it # if ( foo ) { etc. // Only run once for this single query remove_filter( current_filter(), __FUNCTION__ ); $diameter = get_post_meta( ... ); $where .= preg_replace( "/[^0-9,.]/", $diameter, $where ); return $where; } 

Когда вам удастся настроить точные миллиметровые диаметры, которые вы ищете, тогда вызов Regex Search / Replace просто вытолкнет MM / Inch (независимо от того, что там есть).

Конечно, вам нужно каким-то образом получить доступ к значениям post meta ( get_post_meta() ) для более точной установки их в задаче замены Regex, но это должно привести вас к вашей цели.

Тем не менее, я думаю, что удаление MM из ваших записей было бы намного проще и лучше, чем вы пытаетесь достичь.