Выбор записей с использованием @wordpress/data с запросом на основе пользовательского поля всегда возвращает все записи.

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

Я пытаюсь выбрать записи, у которых значение пользовательского поля соответствует условиям поиска, но в результате я всегда получаю все записи.

Для регистрации пользовательского поля для моего типа поста я использую следующий код:

register_post_meta(
  'my_post_type',
  'my_data',
  array(
    'show_in_rest' => true,
    'single' => true,
    'type' => 'integer',
  )
)

Чтобы запросить посты:

const data = useSelect((select) => {
  const metaQuery = [
    {
      key: 'my_data',
      value: [50, 100],
      compare: 'BETWEEN',
      type: 'NUMERIC'
    }
  ];
  return select(coreDataStore).getEntityRecords('postType', 'my_post_type', { meta_query: metaQuery });
});

но я всегда получаю все записи с моими пользовательскими постами и ноль ошибок или предупреждений. Поле метаданных представлено в результатах. Сгенерированный запрос к серверу содержит часть meta_query, но она закодирована в URL. Вероятно, это причина, по которой meta_query игнорируется.

Что я пропустил?

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

Чтобы решить проблему, с которой вы столкнулись при выборе записей на основе кастомного поля в WordPress с помощью @wordpress/data, важно учитывать несколько ключевых аспектов, касающихся регистрации кастомных полей и формирования запросов. Давайте разберем вашу ситуацию шаг за шагом.

Регистрация кастомного поля

Вы правильно используете функцию register_post_meta, чтобы зарегистрировать кастомное поле для вашего типа записи. Однако стоит обратить внимание на несколько моментов:

  1. Параметры функции: Убедитесь, что вы используете правильные значения для параметров при регистрации вашего мета-поля. Например, type должен соответствовать типу данных, который вы собираетесь хранить. В вашем случае это integer. Убедитесь, что данные, которые вы записываете в это поле, действительно являются целыми числами.

  2. Проверка доступности в REST API: Убедитесь, что поле отображается в REST API, что вы уже сделали, установив show_in_rest в true. Это необходимо для того, чтобы у вас была возможность использовать это поле в запросах.

Формирование запроса

Теперь перейдем к тому, как вы формируете запрос с помощью useSelect. Вы указали, что ваш запрос всегда возвращает все записи. Основная проблема, скорее всего, связана с тем, как вы формируете массив запроса meta_query.

В вашем коде:

const metaQuery = [
  {
    key: 'my_data',
    value: [50, 100],
    compare: 'BETWEEN',
    type: 'NUMERIC'
  }
];

Возможные проблемы:

  1. Структура meta_query: В WordPress для выполнения запросов на основе нескольких значений обычно используется массив с объектами. В вашем случае запрос BETWEEN не поддерживается напрямую через массив value — вы должны использовать определенные значения для meta_query. Попробуйте изменить структуру так:

    const metaQuery = {
     meta_key: 'my_data',
     meta_value: [50, 100],
     compare: 'BETWEEN'
    };
  2. URL-кодировка: Если запрос не исполняется должным образом и сервер игнорирует meta_query, это может быть связано с неверным форматом передаваемых данных. Убедитесь, что вы правильно формируете запрос и он генерируется корректно перед отправкой к серверу.

Отладка

  1. Логирование: Добавьте логирование на клиентской стороне, чтобы увидеть, что именно отправляется на сервер. Вы можете использовать console.log для проверки структуры объекта запроса.

  2. Проверка API: Используйте инструменты разработчика, чтобы посмотреть на запросы к REST API. Убедитесь, что meta_query действительно передается на сервер и соответствует ожидаемому формату.

  3. Проверка серверного кода: Если у вас есть доступ к коду, который обрабатывает этот запрос на сервере, убедитесь, что у вас нет переопределения meta_query, которое может повлиять на вывод.

Заключение

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

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

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