Как очистить ключ от пробелов в meta_query?

Есть запрос
$recent2 = new WP_Query(
		array(
			'orderby' => '',
			'showposts'=>-1,
			'meta_query' => array( 
				array(
					'key' => 'cena',
					'value' => array(2500, 2999), // matches exactly "red"
            		'compare' => 'BETWEEN'
				)));

Все работает если цена стоит 2500. Но некоторые пользователи добавили цену с пробелом(2 500).
Как сделать что фильтровалось верно. Или как массово подвести все цены к 1 виду.
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Вам поможет array_map, чтобы применить определенное действие к каждому элементу массива, и preg_replace с простенькой регуляркой, который удалит все whitespace-символы.

<?php
// Входящие данные
$values = [2500, '2 999'];

// Очистка от пробелов
$values = array_map(static function($value) {
    return preg_replace('/\s/', '', $value);
}, $values);

// Запрос
$recent2 = new WP_Query(
    [
        'showposts' => 100, // Не используйте -1, используйте достаточно большое для ваших задач число
        'meta_query' => [
            [
                'key' => 'cena', // Не называйте данные транслитом, используйтe price
                'value' => $values,
                'compare' => 'BETWEEN'
            ]
        ]
    ]
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы