@timbird

Вывод названия категории конкретного товара?

Добрый день!
Как получить название всех категорий к которым относится товар?

Что я делаю:
в корзине у меня выводится название товара, хочу чтобы еще выводились и кликабельные названия категорий, к которым относится данный товар и с сохранением иерархии.
В таком виде: категория / подкатегория и т.д.
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
Возможно Вам это поможет.
У меня организовано так
5f03035b33cc4823224711.png
Для этого я использовал вспомогателную функцию, которая собирает все категории текущего товара по иерархии. Это нужно , что бы получить все номера родительских категорий верхнего уровня, все зависимости подключен ли товар непосредственно к родительской категории или только к дочерней.
function get_unique_deep_term_ids
/**
	 * Получает список иерархических линий терминов для указанного или текущего поста в цикле.
	 *
	 * Возвращается ассоциативный массив вида id => строка id терминов разделенных символом "-" (минус)
	 *
	 * @param string $taxonomy Название таксономии
	 * @param integer/object  [$post_id = 0] ID или объект поста
	 *
	 * @return array Массив id=>hi_line
	 */
	function get_unique_deep_term_ids( $taxonomy, $post_id = 0 ) {
		if ( isset( $post_id->ID ) ) {
			$post_id = $post_id->ID;
		}
		if ( ! $post_id ) {
			$post_id = get_the_ID();
		}

		$terms = get_the_terms( $post_id, $taxonomy );

		if ( ! $terms || is_wp_error( $terms ) ) {
			return array();
		}

		$hierarchies = array();
		foreach ( $terms as $term ) {
			$ancestors = get_ancestors( $term->term_id, 'product_cat' );
			array_unshift( $ancestors, $term->term_id );
			$hierarchies[ $term->term_id ] = implode( '-', array_reverse( $ancestors ) );
		}
		arsort( $hierarchies, SORT_STRING );

		$old = '';
		$hierarchies = array_filter( $hierarchies, function ( $value ) use ( &$old ) {
			$success = false === strpos( $old, $value );
			$old     = $value;

			return $success;
		} );

		return $hierarchies;
	}

Далее просто собираем массив строк и выводим в нужном месте
/** @var WC_Product $product */
global $product;

$hi_lines = get_unique_deep_term_ids( 'product_cat', $product->get_id() );
foreach ( $hi_lines as $key => $value ) {
	$hi_lines[ $key ] = get_term_parents_list( $key, 'product_cat', $args = array( 'separator' => ' / ' ) );
}

...

// Взято по аналогии из шаблона woocommerce/single-product/meta.php
<?php echo '<div class="posted_in">' . _n( 'Category:', 'Categories:', count( $product->get_category_ids() ), 'woocommerce' ) . '<br>' . implode('<br>', $hi_lines) . '</div>' ?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы