Получить term_id со страницы продукта Woocom

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

Я собираюсь создать раздел связанных продуктов, но мне нужно получить 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 'Категорий не найдено.';
}
?>

Пояснение:

  1. Получение категорий: Мы используем get_the_terms() с правильной таксономией product_cat для получения всех категорий для текущего продукта.
  2. Проверка ошибок: Мы проверяем, не возникла ли ошибка и есть ли в итоге возвращённые категории. Если да, мы можем взять term_id первой категории. Если необходимо, можно обработать несколько категорий по вашему усмотрению.
  3. Запрос на связанные товары: Мы создаем новый объект WP_Query, передавая массив аргументов, который включает в себя tax_query для фильтрации по term_id.
  4. Вывод товара: Выводим титулы связанных товаров в виде списка, и не забываем сбросить данные после завершения цикла с помощью wp_reset_postdata().

Такой подход поможет вам корректно получить term_id и предоставить связанные товары на странице продукта.

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

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