Нам нужно получить самого первого предка таксономии, независимо от количества потомков и в каком месте мы пытаемся его получить. Также найдем ближайшего предка с загруженным изображением (term_image).
Получаем первый родительский термин таксономии
Использовать данный код в шаблоне термина таксономии, или в виджете. Но работать он будет непосредственно при нахождении в каком-либо термине. В данном примере в таксономии — product_cat (категории woocommerce).
<?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$tax = 'product_cat';
$top_parent_term = $child_term = $term->term_id; // ID дочернего термина
while( $temp = wp_get_term_taxonomy_parent_id( $top_parent_term, $tax ) ) {
$top_parent_term = $temp;
}
if( $top_parent_term != $child_term ) : ?>
<?php $toppartherm = get_term( $top_parent_term, $tax ); ?>
<a href="<?php echo get_tag_link($toppartherm->term_id); ?>">
<div class="podcat-line podcat-parent">
<div class="cat-image-min"><?php woocommerce_subcategory_thumbnail( $toppartherm ); ?></div>
<h2 class="podcat-line-title"><?php echo $toppartherm->name ?></h2>
</div>
</a>
<?php else: ?>
<?php endif; ?>
Получаем первый родительский термин у записи или товара
<?php $tax = 'product_cat';
$terms = get_the_terms( $post->ID, 'product_cat' ); ?>
<?php if( $terms ) : ?>
<?php foreach ($terms as $term) : ?>
<?php $top_parent_term = $child_term = $term->term_id; // ID дочернего термина
while( $temp = wp_get_term_taxonomy_parent_id( $top_parent_term, $tax ) ) {
$top_parent_term = $temp;
}
if( $top_parent_term != $child_term ) : ?>
<?php $toppartherm = get_term( $top_parent_term, $tax ); ?>
<a href="<?php echo get_tag_link($toppartherm->term_id); ?>">
<?php woocommerce_subcategory_thumbnail( $toppartherm ); ?>
</a>
<?php else: ?>
<?php $toppartherm = get_term( $top_parent_term, $tax ); ?>
<a href="<?php echo get_tag_link($top_parent_term); ?>">
<?php woocommerce_subcategory_thumbnail( $toppartherm ); ?>
</a>
<?php endif; ?>
<?php endforeach; ?>
<?php else: ?>
нет категории
<?php endif; ?>
Ищем ближайшего предка с изображением
Решение по добавлению изображения категориям используем это.
В шаблоне таксономии:
<div class="post-header"
<?php if ( $category->term_image ): ?>
style="background: url('<?php echo wp_get_attachment_image_url( $category->term_image, 'full' ); ?>'); background-size: cover; background-position: center;"
<?php else: ?>
<?php $temp = get_category( $category->parent );
while( empty($temp->term_image) && $temp->parent != 0 ) {
$temp = get_category( $temp->parent );
} ?>
style="background: url('<?php echo wp_get_attachment_image_url( $temp->term_image, 'full' ); ?>'); background-size: cover; background-position: center;"
<?php endif; ?>
></div>
В шаблоне записи:
<div class="post-header"
<?php if( has_post_thumbnail() ): ?>
style="background: url(<?php the_post_thumbnail_url(); ?>); background-size: cover; background-position: center;"
<?php else: ?>
<?php $post_category = get_the_category( $post->ID );
if ( $post_category[0]->term_image ): ?>
style="background: url('<?php echo wp_get_attachment_image_url( $post_category[0]->term_image, 'full' ); ?>'); background-size: cover; background-position: center;"
<?php else: ?>
<?php $temp = get_category( $post_category[0]->parent );
while( empty($temp->term_image) && $temp->parent != 0 ) {
$temp = get_category( $temp->parent );
} ?>
style="background: url('<?php echo wp_get_attachment_image_url( $temp->term_image, 'full' ); ?>'); background-size: cover; background-position: center;"
<?php endif; ?>
<?php endif; ?>
><div>
[site-socialshare]