Получение URL миниатюры таксономии
Вот как я пытаюсь сделать это сейчас:
$taxonomies = array(
'product_cat'
);
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
'exclude' => array(),
'exclude_tree' => array(),
'include' => array(),
'number' => '',
'fields' => 'all',
'slug' => '',
'parent' => '',
'hierarchical' => true,
'child_of' => 0,
'childless' => false,
'get' => '',
'name__like' => '',
'description__like' => '',
'pad_counts' => false,
'offset' => '',
'search' => '',
'cache_domain' => 'core'
);
$terms = get_terms($taxonomies, $args);
$print_terms = 0;
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
foreach ( $terms as $term ) {
$term_img = wp_get_attachment_url( get_post_thumbnail_id($term->term_id) );
var_dump($term_img); /* Всегда возвращает Bool(false) */
Итак, вопрос:
Знаете ли вы, что я делаю неправильно?
Таксономии по умолчанию не имеют миниатюрных изображений. Не зная, как они установлены, я не могу точно сказать, как получить миниатюры, но что касается вопроса "что я делаю не так?" - функция get_post_thumbnail_id
принимает ID записи или, если он не указан, предполагает текущую запись в Цикле (Loop). Вы передаёте ей term_id
, что не будет работать. Это видно в исходном коде:
32 function get_post_thumbnail_id( $post_id = null ) {
33 $post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
34 return get_post_meta( $post_id, '_thumbnail_id', true );
35 }
Предположу, что если term_id
случайно совпадёт с ID записи, вы можете что-то получить, но это не будет тем, что вы хотите или ожидаете.

Принятый ответ больше недействителен, так как woocommerce_get_term_meta
устарел. Также больше нет метаполя thumbnail_id
. Вот правильное решение на 2021 год, если вы используете WooCommerce:
$term_image_id = get_term_meta( $term->term_id, 'product_search_image_id', true ); $term_image = wp_get_attachment_url( $term_image_id );

Для получения изображения категории и его URL не требуется WooCommerce.
$categories = get_categories();
foreach($categories as $cat) {
$image_id = get_term_meta( $cat->term_id, 'thumbnail_id', true );
$post_thumbnail_img = wp_get_attachment_image_src( $image_id, 'thumbnail' );
echo '<img src="' . $post_thumbnail_img[0] . '" alt="' . $cat->name . '" />';
}
$post_thumbnail_img — это массив, где ключ 0 соответствует URL, 1 — ширине, а 2 — высоте.
Вместо 'thumbnail' можно использовать другие размеры изображений ('featured', 'medium', 'large' или любой другой пользовательский размер из вашей темы). Однако 'thumbnail_id' должен оставаться без изменений.
Также можно получить метаданные изображения, такие как "alt", "title" и другие, с помощью пользовательской функции, расширив функционал.
Предполагается, что вы знаете, как передавать аргументы в get_categories в цикле. Если нет, ознакомьтесь с подробностями на странице get_categories в документации WordPress.

<?php
// Получаем все родительские категории товаров
$wcatTerms = get_terms('product_cat', array('hide_empty' => 0, 'parent' =>0));
foreach($wcatTerms as $wcatTerm) : ?>
<?php
// Получаем ID миниатюры и URL изображения для категории
$thumb_id = get_woocommerce_term_meta( $wcatTerm->term_id, 'thumbnail_id', true );
$term_img = wp_get_attachment_url( $thumb_id );
?>
<div class="product-item">
<div class="item-inner fadeInUp">
<div class="product-thumbnail">
<div class="icon-sale-label sale-left">Распродажа</div>
<!--<div class="icon-new-label new-right">Новинка</div>-->
<div class="pr-img-area"> <img class="first-img" src="<?php echo $term_img;?>" alt="Изображение категории <?php echo $wcatTerm->name; ?>" title="Изображение категории <?php echo $wcatTerm->name; ?>"> <img class="hover-img" src="<?php echo $term_img;?>" alt="Изображение категории <?php echo $wcatTerm->name; ?> при наведении" title="Изображение категории <?php echo $wcatTerm->name; ?> при наведении"> </div>
</div>
<div class="item-info">
<div class="info-inner">
<div class="item-title"> <a title="<?php echo $wcatTerm->name; ?>" href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a> </div>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
