Я использую 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 из ваших записей было бы намного проще и лучше, чем вы пытаетесь достичь.