Вопрос или проблема
Я пытаюсь запросить записи типа Product, которые соответствуют текущей записи в цикле типа Item, на основе пользовательских полей product-ean и item-ean.
Например: у меня есть запись Item с item-ean 123 и 2 записи Product с product-ean 123. Теперь я хотел бы показать обе записи Product на записи Item.
Буду признателен за помощь, спасибо.
Менно
В документации WP вы можете найти ответ.
Я не тестировал этот код, но он должен выглядеть примерно так:
$args = array(
'post_type' => 'product',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'product-ean',
'value' => 123,
'compare' => '=',
),
array(
'key' => 'item-ean',
'value' => 123,
'compare' => '=',
),
),
);
$query = new WP_Query( $args );
.
Ответ или решение
Использование WP_Query для выборки постов по значениям пользовательских полей
Запросы к пользовательским полям в WordPress являются мощным инструментом для получения связанных данных. В вашем случае необходимо получить посты определённого типа (в данном случае, product
), основываясь на значениях пользовательских полей, которые соответствуют текущему посту другого типа (item
). Ниже приведён подробный разбор решения этой задачи с помощью WP_Query.
Задача
У вас есть пост типа Item
, у которого есть пользовательское поле item-ean
. Вам нужно получить все посты типа Product
, у которых пользовательское поле product-ean
совпадает со значением item-ean
текущего поста. Например, если у вас есть Item
с item-ean
равным 123
, нужно найти все Product
с product-ean
равным 123
.
Шаг 1: Получение значения item-ean
Перед тем как выполнить запрос, необходимо получить значение пользовательского поля item-ean
текущего поста в цикле. Это можно сделать с помощью функции get_post_meta()
:
$current_item_ean = get_post_meta(get_the_ID(), 'item-ean', true);
Шаг 2: Создание WP_Query
Теперь, когда у нас есть значение item-ean
, мы можем использовать его в мета-запросе для поиска постов типа Product
. Ниже представлен готовый пример кода:
// Получаем значение 'item-ean' текущего поста
$current_item_ean = get_post_meta(get_the_ID(), 'item-ean', true);
// Готовим аргументы для WP_Query
$args = array(
'post_type' => 'product', // Специфицируем тип поста
'meta_query' => array(
array(
'key' => 'product-ean', // Указываем ключ пользовательского поля
'value' => $current_item_ean, // Сравниваем с 'item-ean'
'compare' => '=', // Указываем условие сравнения
),
),
);
// Выполняем запрос
$query = new WP_Query($args);
// Проверяем наличие найденных постов
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Здесь можно вывести данные о посте
the_title(); // Например, выводим заголовок поста
echo '<br>'; // Разделитель
}
wp_reset_postdata(); // Сбрасываем данные поста после завершения запроса
} else {
echo 'Продукты не найдены.';
}
Объяснение кода
- Получение значения: Мы извлекаем значение мета-поля
item-ean
текущего поста. - Настройка WP_Query:
post_type
: устанавливаем наproduct
, чтобы искать только посты нужного типа.meta_query
: создаём массив для фильтрации по метаполям, в котором запрашиваем совпадениеproduct-ean
сitem-ean
.
- Проверка и вывод результатов: Если посты найдены, они выводятся в цикле. Не забудьте сбросить глобальные данные поста с помощью
wp_reset_postdata()
, чтобы избежать возможных конфликтов.
Заключение
Использование WP_Query и мета-запросов позволяет гибко управлять извлечением данных в WordPress. Эта методология поможет вам динамически отображать связанные продукты на страницах, основываясь на соответствующих пользовательских полях. Удачи в реализации вашего проекта!