Получить заголовок текущей таксономии категории товара в 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().
Nicolai Grossherr
@helgatheviking Спасибо, что нашли время помочь. Оба решения работают для одной категории.
Kapitol
@ialocin Действительно так! Каждый день узнаю что-то новое.
helgatheviking
В большинстве известных мне тем это стандартно, но ваша тема может отличаться. Приведённый ниже код взят из файла 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
Nicolai Grossherr
Ваше решение действительно показывает одну категорию, но это все еще не текущая категория. Вы упомянули проблему наличия нескольких родительских категорий, сказав "не будет работать, если у товара несколько главных/родительских категорий, или по крайней мере не покажет их все;"
Kapitol
Вы находитесь на странице одного товара, если у товара несколько категорий верхнего уровня, как может быть одна текущая категория? @Kapitol
Nicolai Grossherr
Хороший вопрос. Возможно, это невозможно. Может быть, это решение вроде хлебных крошек. Ниже то, чего я хотел достичь.
На странице категории отображается текущая категория, в которой вы находитесь. При клике на товар в этой категории вы переходите на страницу товара. Я хочу, чтобы был заголовок, указывающий, из какой категории вы пришли.
Kapitol
Я знаю, что это невозможно без дополнительной логики. Кстати, у хлебных крошек та же проблема — как им определить правильный путь. Обычно выбирается один вариант в зависимости от того, как функция сортирует термины. Твою проблему, с другой стороны, можно решить, передавая значение на страницу товара из категории, с которой ты пришел, но это будет совершенно другой вопрос, не тот, который ты задал. Тебе стоит изучить этот вариант и задать новый вопрос. Этот, на мой взгляд, решен или не имеет ответа. @Kapitol
Nicolai Grossherr