Получить заголовок текущей таксономии категории товара в WooCommerce
Я хочу показать заголовок текущей таксономии категории товара на странице отдельного товара.
Код ниже работает, но возвращает все категории товаров. Мне нужна помощь, чтобы выделить текущую категорию.
<?php
global $post;
$args = array( 'taxonomy' => 'product_cat',);
$terms = wp_get_post_terms($post->ID,'product_cat', $args);
$count = count($terms);
if ($count > 0) {
foreach ($terms as $term) {
echo '<div style="direction:rtl;">';
echo 'Категория: ' . $term->name;
echo '</div>';
}
}
?>
После нескольких часов экспериментов и поисков, вы, ребята, моя последняя надежда на решение. Спасибо.

Вы можете использовать get_the_term_list
echo get_the_term_list( $post->ID, 'product_cat', '<div style="direction:rtl;">', '</div>', '' );
Система отображения 1 заголовка категории на странице отдельного товара перестаёт работать, если вы начинаете добавлять товар в несколько категорий.
Однажды я чуть не сошёл с ума на проекте, где клиент добавлял элементы портфолио в две категории, но почему-то хотел, чтобы я показывал "правильный" заголовок категории в зависимости от ситуации. Этот проект привёл меня к созданию плагина Radio Buttons for Taxonomies, который ограничивает пользователей выбором только одного термина в определённых таксономиях.

Просто как информационное дополнение: использование get_the_term_list()
делает то же самое, что и $product->get_categories()
.

@helgatheviking Спасибо, что нашли время помочь. Оба решения работают для одной категории.

@ialocin Действительно так! Каждый день узнаю что-то новое.

В большинстве известных мне тем это стандартно, но ваша тема может отличаться. Приведённый ниже код взят из файла meta.php
, который отвечает за отображение метаданных — категорий, тегов — в WooCommerce.
Код:
<?php
$size = sizeof( get_the_terms( $post->ID, 'product_cat' ) );
echo $product->get_categories( ', ', '<span class="posted_in">' . _n( 'Категория:', 'Категории:', $size, 'woocommerce' ) . ' ', '.</span>' );
?>
Обновление:
Я давал развёрнутый ответ на эту проблему некоторое время назад:

Спасибо, ialocin. Этот код возвращает все категории. Это не то, что мне нужно. Я хочу, чтобы отображалась только текущая категория, в которой я нахожусь.

Кажется, я вас неправильно понял, смотрите мою правку. @Kapitol

Ваше решение действительно показывает одну категорию, но это все еще не текущая категория. Вы упомянули проблему наличия нескольких родительских категорий, сказав "не будет работать, если у товара несколько главных/родительских категорий, или по крайней мере не покажет их все;"

Вы находитесь на странице одного товара, если у товара несколько категорий верхнего уровня, как может быть одна текущая категория? @Kapitol

Хороший вопрос. Возможно, это невозможно. Может быть, это решение вроде хлебных крошек. Ниже то, чего я хотел достичь.
На странице категории отображается текущая категория, в которой вы находитесь. При клике на товар в этой категории вы переходите на страницу товара. Я хочу, чтобы был заголовок, указывающий, из какой категории вы пришли.

Я знаю, что это невозможно без дополнительной логики. Кстати, у хлебных крошек та же проблема — как им определить правильный путь. Обычно выбирается один вариант в зависимости от того, как функция сортирует термины. Твою проблему, с другой стороны, можно решить, передавая значение на страницу товара из категории, с которой ты пришел, но это будет совершенно другой вопрос, не тот, который ты задал. Тебе стоит изучить этот вариант и задать новый вопрос. Этот, на мой взгляд, решен или не имеет ответа. @Kapitol
