Сравнить два мета-значения ключа со значением между – WordPress

Вопрос или проблема

Записи в CPT следующие

Имя Размер От Размер До

Демо 1 900 6000

Демо 2 5000 6000

Демо 3 7500 12000

Демо 4 2500 7500

Демо 5 9000 12000

    $meta_query = array(
        'relation' => 'OR',
        array(
            array(
                'key' => '_size',
                'value'    =>  array(1000, 5000),
                'type'     => 'decimal(10, 2)',
                'compare'  => 'between'
            ),
            array(
                'key' => '_size_to',
                'value'    =>  array(1000, 5000),
                'type'     => 'decimal(10, 2)',
                'compare'  => 'between'
            ),
        ),
    );

После применения вышеуказанного meta_query не удается получить фактический результат

Ожидаемый результат
Имя Размер От Размер До

Демо 1 900 6000

Демо 2 5000 6000

Демо 4 2500 7500

На самом деле это работает как ниже SQL. Пожалуйста, просмотрите и дайте мне знать, что лучше всего подходит для этой ситуации.

Прямо сейчас

SELECT * FROM test WEHRE _size BETWEEN (1000 AND 5000) OR _size_to BETWEEN (1000 AND 5000)

Пытаюсь сделать как ниже

SELECT * FROM test WEHRE 1000 BETWEEN (_size AND _size_to) OR 5000 BETWEEN (_size AND _size_to)

.

Ответ или решение

Для понимания проблемы, с которой вы столкнулись, важно провести четкое сравнение между значениями мета-ключей в WordPress с использованием правильного подхода к запросам. Давайте разберем вашу исходную проблему и определим, как получить ожидаемый результат.

Проблема

Вы создали запрос meta_query для получения записи из Типа Публикации (CPT), используя два мета-значения: _size и _size_to. Запрос, который вы сейчас используете, формирует логику OR, при этом вы получаете записи, если одно из условий истинно. Однако это не соответствует вашим ожиданиям получить записи, которые находятся в диапазоне между _size и _size_to.

Ваша текущая логика приводит к следующим SQL-запросам:

SELECT * FROM test WHERE _size BETWEEN (1000 AND 5000) OR _size_to BETWEEN (1000 AND 5000)

Это приводит к тому, что, например, запись "Demo 1" будет возвращен, даже если ее _size меньше нижней границы диапазона (в данном случае 1000).

Ожидаемый выход

Вы ожидаете получить записи, которые находятся между значениями _size и _size_to, т.е. выполнение условия:

SELECT * FROM test WHERE 1000 BETWEEN (_size AND _size_to) OR 5000 BETWEEN (_size AND _size_to)

Решение

Чтобы корректно получить данные из WordPress с использованием правильного механизма, нужно изменить структуру вашего meta_query. Вот один из подходов, который вы можете использовать:

  1. Вместо отдельного запроса для _size и _size_to, создайте объединенный запрос, который проверит, находится ли диапазон между двумя мета-значениями.

  2. Вам нужно будет использовать параметры BETWEEN для проверки значений мета-данных, чтобы обеспечить получение нужных записей.

Пример meta_query

$meta_query = array(
    'relation' => 'OR',
    array(
        'key' => '_size',
        'value' => '1000',
        'compare' => '<=',
        'type' => 'DECIMAL(10,2)',
    ),
    array(
        'key' => '_size_to',
        'value' => '5000',
        'compare' => '>=',
        'type' => 'DECIMAL(10,2)',
    ),
);

Итог

Такой запрос удостоверится, что вы получаете записи, у которых _size меньше или равно 1000 и _size_to больше или равно 5000, что соответствует вашей желаемой логике.

Заключение

Старайтесь всегда создавать условия, которые проверяют границы диапазона по обоим мета-ключам. Работая с WordPress, понимание логики meta_query является ключевым аспектом получения корректных данных. Не забывайте тестировать запросы на небольшом объеме данных, чтобы убедиться, что они возвращают ожидаемые результаты.

SEO Оптимизация

Обеспечение четкой структуры вашего кода не только улучшает его читаемость, но и способствует легкому пониманию, что, в свою очередь, помогает в взаимодействии с вашим контентом, будь то пользователи или другие разработчики. Используйте ключевые слова, такие как "WordPress meta_query", "поиск по мета-значениям", и "CPT запросы", чтобы улучшить видимость вашей темы в поисковых системах и привлечь целевую аудиторию.

Оцените материал
Добавить комментарий

Капча загружается...