Получить 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>
Author: sparkinglabs, 2018-07-18

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; ?>
 2
Author: LoicTheAztec, 2018-07-18 12:11:12

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" />';
 1
Author: Sudharshan Nair, 2018-07-19 04:29:49