Получить URL-адрес изображения категории товаров Woocommerce
Я использовал следующий код, чтобы получить URL-адрес миниатюры категории товаров Woocommerce, но он выводит только тег <img>
с src="unknown"
.
$cat_slug = t-shirts;
$thumbnail_id = get_woocommerce_term_meta( $cat_slug, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
echo '<img src="'.$image.'" alt="" width="50" height="50" />';
Каков наилучший подход для того, чтобы это сработало?
Редактировать
Во втором вызове эскиза для категории jean он просто выводит <img src(unknown) alt="" width="50" height="50" />
.
<div class="list-item">
<div class="item-img">
<?php
$term_slug = 't-shirts';
$taxonomy = "product_cat";
$term_id = get_term_by( 'slug', $term_slug, $taxonomy )->term_id;
$thumbnail_id = get_woocommerce_term_meta( $term_id, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
echo '<img src="'.$image.'" alt="" width="50" height="50" />';
?>
</div>
<a href="#">
<div class="item-name">
<?php if( $term = get_term_by('slug', 't-shirts', 'product_cat') ) echo $term->name;?>
</div>
</a>
</div>
<div class="list-item">
<div class="item-img">
<?php
$term_slug = 'jeans';
$taxonomy = "product_cat";
$term_id = get_term_by( 'slug', $term_slug, $taxonomy )->term_id;
$thumbnail_id = get_woocommerce_term_meta( $term_id, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
echo '<img src="'.$image.'" alt="" width="50" height="50" />';
?>
</div>
<a href="#">
<div class="item-name">
<?php if( $term = get_term_by('slug', 'jeans', 'product_cat') ) echo $term->name;?>
</div>
</a>
</div>
2 answers
Функции get_woocommerce_term_meta()
требуется идентификатор термина вместо термина slug. Таким образом, вы можете использовать функцию get_term_by()
Wordpress, чтобы получить идентификатор термина из слага термина.
Таким образом, ваш код будет:
$term_slug = 't-shirts';
$taxonomy = 'product_cat';
$term_id = get_term_by( 'slug', $term_slug, $taxonomy )->term_id;
$thumbnail_id = get_woocommerce_term_meta( $term_id, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
// Output
echo '<img src="'.$image.'" alt="" width="50" height="50" />';
Протестировано и работает
Дополнение rev 3 (связано с вашим комментарием)
Я внес некоторые другие изменения, используя цикл foreach, оптимизирующий код и позволяющий вам добавлять столько слизней категорий продуктов, сколько вы хотите.
Я также добавил термин ссылка, и внесите некоторые незначительные изменения.
<?php
$term_slugs = array('jeans', 't-shirts');
$taxonomy = "product_cat";
// Loop though the term slugs array
foreach ( $term_slugs as $term_slug ):
$term = get_term_by( 'slug', $term_slug, $taxonomy );
if( $term ):
$term_link = get_term_link( $term, $taxonomy );
$thumb_id = get_woocommerce_term_meta( $term->term_id, 'thumbnail_id', true );
$img_src = wp_get_attachment_url( $thumb_id );
?>
<div class="list-item">
<div class="item-image">
<img src="<?php echo $img_src; ?>" alt="" width="50" height="50" />
</div>
<div class="item-name">
<a href="<?php echo $term_link; ?>"><?php echo $term->name; ?></a>
</div>
</div>
<?php endif;
endforeach; ?>
get_woocommerce_term_meta
имеет term_id
в качестве первого параметра. См. Здесь
Кодируйте что-то вроде этого
$termId = 1;
$thumbnail_id = get_woocommerce_term_meta( $termId, 'thumbnail_id', true );
ИЛИ
Чтобы получить миниатюру из имени слизняка, вам необходимо получить идентификатор термина с помощью get_term_by
. Вы можете сослаться на здесь
$termName = 't-shirts';
$category = get_term_by('name', $termName, 'product_cat');
$termId = $category->term_id;
$thumbnail_id = get_woocommerce_term_meta( $termId, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
echo '<img src="'.$image.'" alt="" width="50" height="50" />';