Как получить категорию по ID товара?

23 нояб. 2012 г., 17:30:32
Просмотры: 136K
Голосов: 13

У меня есть ID товара (1345), как я могу получить название категории этого конкретного товара?

Я пробую

$post_categories = wp_get_post_categories( $post->ID );
print_r( $post_categories );

но выводится:

Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )

Что это значит?

Спасибо

2
Комментарии

Что означает ID? Что такое 'продукт'? Это произвольный тип записи? Мета-поле? Что именно?

s_ha_dum s_ha_dum
23 нояб. 2012 г. 17:37:29

Привет, это продукт WooCommerce и он является типом записи.

Rodrigo Sanz Rodrigo Sanz
23 нояб. 2012 г. 21:35:01
Все ответы на вопрос 5
0
22

Вариант №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;
}
2 сент. 2017 г. 15:46:09
6
14

Поскольку вопрос помечен тегом woocommerce, я предполагаю, что это произвольный тип записи (CPT), созданный плагином WooCommerce для WordPress. Этот ответ неприменим, если это не так.

Категории продуктов — это не обычные категории, а произвольная таксономия, созданная специально для продуктов, которая просто обозначена как "Категории".

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

23 нояб. 2012 г. 20:13:25
Комментарии

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

Rodrigo Sanz Rodrigo Sanz
23 нояб. 2012 г. 21:37:17

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

Mridul Aggarwal Mridul Aggarwal
24 нояб. 2012 г. 15:17:07

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

Rodrigo Sanz Rodrigo Sanz
25 нояб. 2012 г. 18:03:36

он выводит это: 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 ) )

Rodrigo Sanz Rodrigo Sanz
25 нояб. 2012 г. 18:05:37

И в массиве нет категории? Я что-то сделал не так?

Rodrigo Sanz Rodrigo Sanz
25 нояб. 2012 г. 18:06:25

Вы использовали product_tag. Возможно, название категории было product_category? Код выглядит нормально, и, судя по выводу, вы получаете термин с именем new и id 104. new — это название одного из тегов?

Mridul Aggarwal Mridul Aggarwal
25 нояб. 2012 г. 23:26:06
Показать остальные 1 комментариев
2
12

Я сам нашел ответ на свой вопрос, это сработало для меня:

<?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 за вашу помощь

27 нояб. 2012 г. 21:29:12
Комментарии

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

Johannes Pille Johannes Pille
27 нояб. 2012 г. 21:34:34

вы можете использовать $product->get_id() чтобы узнать "$id_product"

Fanky Fanky
1 мар. 2021 г. 16:27:13
1
<?php
   // Получаем термины таксономии 'product_cat' для текущего товара
   $terms = get_the_terms($product->ID, 'product_cat');
       // Перебираем полученные термины
       foreach ($terms as $term) {

         // Получаем название категории товара
         $product_cat = $term->name;
            // Выводим название категории
            echo $product_cat;
              // Прерываем цикл после первого элемента
              break;
          }
   ?>
19 авг. 2020 г. 11:13:19
Комментарии

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему?

fuxia fuxia
19 авг. 2020 г. 12:34:18
1

Получить все product_cat и вывести

global $product;
$product_cats_ids = wc_get_product_term_ids( $product->get_id(), 'product_cat' );
foreach( $product_cats_ids as $cat_id ) {
    $term = get_term_by( 'id', $cat_id, 'product_cat' );
    echo $term->name;
}
4 июн. 2024 г. 23:49:35
Комментарии

это сработало для меня

Mehdi Mehdi
6 окт. 2024 г. 01:33:44