Вопрос или проблема
Я собираюсь создать раздел связанных продуктов, но мне нужно получить term_id
, чтобы запросить самые свежие продукты для категории страницы продукта. Я пытался использовать функцию get_the_terms()
, но не смог получить никакие термины.
Вероятно, будет массив term_id
, потому что есть родительские и дочерние категории, но я разберусь с этим, как только смогу их получить.
<?php
global $post;
echo 'ТЕСТ: ' . $post->ID;
echo 'ТЕСТ TERM_ID' . get_the_terms($post->ID, 'category');
$term_id = 29; // должен быть term_id страницы
$the_query = new WP_Query(
array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 3,
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $term_id,
'operator' => 'IN'
)
)
));
Ответ или решение
Чтобы получить term_id
категории товара на странице продукта WooCommerce, вам необходимо использовать функцию get_the_terms()
правильно. В вашем коде есть небольшие ошибки, которые мешают получению нужных данных. Давайте я объясню, как это сделать пошагово.
Во-первых, убедитесь, что вы обращаетесь к корректной таксономии. Для продуктов в WooCommerce используется таксономия product_cat
. То есть, вам нужно будет получить термины именно по этой таксономии.
Вот исправленный код:
<?php
global $post;
// Получаем термины по таксономии 'product_cat'
$terms = get_the_terms($post->ID, 'product_cat');
if ($terms && !is_wp_error($terms)) {
// Мы предполагаем, что нам нужно взять первый term_id
// Если у товара несколько категорий, вы можете изменить это по своему усмотрению
$term_id = $terms[0]->term_id;
// Выводим term_id для проверки
echo 'Term ID: ' . $term_id;
// Теперь создаем WP_Query для получения связанных товаров
$the_query = new WP_Query(
array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 3,
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $term_id,
'operator' => 'IN'
)
)
)
);
// Обработка результатов
if ($the_query->have_posts()) {
echo '<h2>Связанные товары:</h2><ul>';
while ($the_query->have_posts()) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
wp_reset_postdata(); // Сбрасываем данные
} else {
echo 'Нет связанных товаров.';
}
} else {
echo 'Категорий не найдено.';
}
?>
Пояснение:
- Получение категорий: Мы используем
get_the_terms()
с правильной таксономиейproduct_cat
для получения всех категорий для текущего продукта. - Проверка ошибок: Мы проверяем, не возникла ли ошибка и есть ли в итоге возвращённые категории. Если да, мы можем взять
term_id
первой категории. Если необходимо, можно обработать несколько категорий по вашему усмотрению. - Запрос на связанные товары: Мы создаем новый объект
WP_Query
, передавая массив аргументов, который включает в себяtax_query
для фильтрации поterm_id
. - Вывод товара: Выводим титулы связанных товаров в виде списка, и не забываем сбросить данные после завершения цикла с помощью
wp_reset_postdata()
.
Такой подход поможет вам корректно получить term_id
и предоставить связанные товары на странице продукта.