在 Woocommerce 中获取并显示产品类别特色图片

Get and display the product category featured image in Woocommerce

我正在制作我的第一个主题,感谢 The Loop 和 WooCommerce 的 SDK 提供的所有帮助,一切都进展得非常快。然后今天我花了一整天的时间来做一些像显示图像这样简单的事情……经过一整天的努力,我唯一学到的是 WP 似乎没有提供获取类别图像的方法,而且很多人都有问这个问题很多年了,但我仍然找不到真正做到这一点的方法...... :(

我想做的是在我的商店上方创建一个滑块,显示精选商店类别的图像。我希望能够输入术语名称列表,并基于此我的函数应该以类别图像的形式生成指向产品类别的链接。

听起来很简单...事实证明,它远非简单...在您离开并将此标记为重复问题之前,让我解释一下我为什么要问它...

我找到的一些解决方案要求我知道术语的 ID,而不是燕鸥名称。有人说 "Get the id's using a custom term search" 但没有解释如何。我知道如何对 post 进行基于自定义分类的查询,但不知道如何对术语进行查询。文档在传递给查询词的值方面让我感到困惑:(

其他解决方案要求我首先找到特定类别的产品,然后从那里反向查找产品的类别图像 (?????)

当然还有人们喜欢为所有事情给出的默认答案:"Oh you are designing your own theme and want to show category icons? Simple, just download a plugin to do that for you"。现在我为什么不考虑将其他人的插件添加到我的主题中呢? (捂脸)

其他答案只是展示了如何打印术语名称列表,但到目前为止还没有任何东西能让我做 应该就这么简单:

$categories = array("software", "plugins", "merch");
foreach($categories as $cat) {
    $term_id = get_term_id($cat);
    $term_image = get_term_featured_image($term_id);
    echo '<img src="'.$term_image.'">;
    }

获取术语的第一个问题是获取术语 id 的 wordpress 函数仅适用于类别分类法,但我需要查询 WooCommerce 的 product_cat 分类法。其次,即使您有 ID,似乎也没有获取 thumbnail/featured 图像的选项。那么现在呢?

所以我进入低级别并开始使用 $wpdb 直接查询 tables 并且我确定我之后的术语有 term_id 94。我查询 termmeta table缩略图的 post ID,我发现它是 905。现在我转向我的 post s table 并发现......没有 post 条目 905!什么鬼?所以我对另外两个类别执行此操作并找到相同的东西。查找图像的 ID 导致尝试提取 post 的附件时没有返回任何内容,因为没有 post 匹配图像的 ID...

为什么这么难? WordPress 使其他一切变得如此简单,但这个看似简单的任务似乎几乎不可能完成......所以现在你看到我已经用谷歌搜索了这个并且已经挣扎了我的背后,我提出这个问题是出于绝望:

如何获取 product_cat 个术语名称数组并将其转换为 url 个术语名称数组以显示类别的图像?

谢谢

最短的方法是使用woocommerce_subcategory_thumbnail()专用函数:

$product_categories = array("software", "plugins", "merch");

// Loop through the product categories
foreach( $product_categories as $category ) {
    // Get the WP_term object
    $term = get_term_by( 'slug', sanitize_title( $category ), 'product_cat' );

    // Get the term link (if needed)
    $term_link = get_term_link( $term, 'product_cat' );

    // Display the product category thumbnail
    woocommerce_subcategory_thumbnail( $term );
}

另一种逐步方式,将显示链接的产品类别图像及其名称:

$product_categories = array("software", "plugins", "merch");

// Loop through the product categories
foreach( $product_categories as $category ) {
    // Get the WP_term object
    $term = get_term_by( 'slug', sanitize_title( $category ), 'product_cat' );

    // Get the term link (if needed)
    $term_link = get_term_link( $term, 'product_cat' );

    // Get the thumbnail Id
    $thumbnail_id  = (int) get_woocommerce_term_meta( $term->term_id, 'thumbnail_id', true );

    if( $thumbnail_id > 0 ) {
        // Get the attchement image Url
        $term_img  = wp_get_attachment_url( $thumbnail_id );

        // Formatted thumbnail html
        $img_html = '<img src="' . $term_img . '">';
    } else {
        $img_html = '';
    }
    echo '<a href="' . $term_link . '">' . $img_html . $term->name . '</a><br>';
}

两者都有效……


获取所有产品类别 WP_Term 对象并显示它们及其缩略图:

// Get all product categories
$product_category_terms = get_terms( array(
    'taxonomy'   => "product_cat",
    'hide_empty' => 1,
));

foreach($product_category_terms as $term){
    // Get the term link (if needed)
    $term_link = get_term_link( $term, 'product_cat' );

    ## -- Output Example -- ##

    // The link (start)
    echo '<a href="' . $term_link . '" style="display:inline-block; text-align:center; margin-bottom: 14px;">';

    // Display the product category thumbnail
    woocommerce_subcategory_thumbnail( $term );

    // Display the term name
    echo $term->name;

    // Link close
    echo '</a>';
}