Как получить категорию по ID товара?
У меня есть ID
товара (1345
), как я могу получить название категории этого конкретного товара?
Я пробую
$post_categories = wp_get_post_categories( $post->ID );
print_r( $post_categories );
но выводится:
Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )
Что это значит?
Спасибо
Вариант №1
Получить все product_cat с помощью этой функции:
global $product;
$terms = get_the_terms( $product->get_id(), 'product_cat' );
Вариант №2 Если вам нужны только их ID, вы можете получить все product_category_ids, связанные с конкретным продуктом, используя эту функцию:
global $product;
$product_cats_ids = wc_get_product_term_ids( $product->get_id(), 'product_cat' );
Дополнительно
Если вы хотите вывести, например, названия категорий, вам понадобится объект термина категории. Это можно получить с помощью get_term_by()
.
Пример:
foreach( $product_cats_ids as $cat_id ) {
$term = get_term_by( 'id', $cat_id, 'product_cat' );
echo $term->name;
}

Поскольку вопрос помечен тегом woocommerce, я предполагаю, что это произвольный тип записи (CPT), созданный плагином WooCommerce для WordPress. Этот ответ неприменим, если это не так.
Категории продуктов — это не обычные категории, а произвольная таксономия, созданная специально для продуктов, которая просто обозначена как "Категории".
Вам следует изучить документацию WooCommerce, чтобы найти функцию, которая сделает это за вас. Если вы ничего не найдете, можно попробовать альтернативное решение. Для этого сначала нужно узнать название таксономии. Его можно скопировать из URL в браузере, когда вы находитесь на экране редактирования категорий в админ-панели. Затем можно использовать функцию wp_get_post_terms
для получения терминов.

Привет, спасибо за ответ. Да, это товар WooCommerce в WordPress. Хорошо, я попробую, какие параметры $args нужны для wp_get_post_terms? Я вижу, что "taxonomy" и "args" необязательные, так что попробую только с ID.

Только с ID не сработает. По умолчанию таксономия post_tag
. Вам нужно передать название таксономии. Без $args
это будет работать, но вы можете их использовать, если хотите. Они предназначены для переопределения значений по умолчанию, как объясняется на этой странице

Я проверил, но это не выводит категорию, в которой находится товар. Я использовал это: <?php $term_list = wp_get_post_terms(1345, 'product_tag', array("fields" => "all")); print_r($term_list); ?>

он выводит это: Array ( [0] => stdClass Object ( [term_id] => 104 [name] => new [slug] => new [term_group] => 0 [term_taxonomy_id] => 104 [taxonomy] => product_tag [description] => Hola qué tal esto es una descripción? [parent] => 0 [count] => 8 ) ) Array ( [0] => stdClass Object ( [term_id] => 104 [name] => new [slug] => new [term_group] => 0 [term_taxonomy_id] => 104 [taxonomy] => product_tag [description] => Hola qué tal esto es una descripción? [parent] => 0 [count] => 8 ) )

Я сам нашел ответ на свой вопрос, это сработало для меня:
<?php
$term_list = wp_get_post_terms($id_product,'product_cat',array('fields'=>'ids'));
$cat_id = (int)$term_list[0];
echo get_term_link ($cat_id, 'product_cat');
?>
Спасибо Mridul Aggarwal за вашу помощь

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

<?php
// Получаем термины таксономии 'product_cat' для текущего товара
$terms = get_the_terms($product->ID, 'product_cat');
// Перебираем полученные термины
foreach ($terms as $term) {
// Получаем название категории товара
$product_cat = $term->name;
// Выводим название категории
echo $product_cat;
// Прерываем цикл после первого элемента
break;
}
?>
