Woocommerce - 获取属性缩略图并显示

Woocommerce - Get Attribute Thumbnail and Display

这里有很多帖子试图解决这个问题,但是我一直没能找到有效的解决方案。

我试图获取缩略图的URL,与单个产品页面上显示的产品的产品属性术语相关联,然后在产品元数据下方显示缩略图,与a URL 到术语的存档。

我使用的钩子如下:

add_action('woocommerce_product_meta_end','product_brand_image');
   

然后我在定义钩子中使用的函数:

function product_brand_image() {
} 

属性名称是“Brand”,slug 是“brand”。

我已经设法使用以下方法获得术语 ID:

function product_brand_image() {
    global $product;
    $attributes = $product->get_attributes();
    $attr_id = $attributes['pa_brand']['options'][0];
} 

我已经打印了这个并且它 returns 术语 ID,我已经确认它是正确的。

我现在正在努力使用它来获取关联的术语缩略图 URL 和术语存档 slug 以便能够插入缩略图然后 link 将其插入存档。

希望在不使用其他插件的情况下以编程方式解决此问题。

更新:

好的,所以以@Barrie Dawson 的评论为指导,我现在到此为止:

function product_brand_image() {
    global $product;
    $attributes = $product->get_attributes();
    $attr_id = $attributes['pa_brand']['options'][0];
    $termMeta = get_term_meta($attr_id);
    if (is_array($termMeta) && array_key_exists('product_search_image_id', $termMeta)) {
        $post_id = $termMeta['product_search_image_id'][0];
        $postData = get_post($post_id);
    }
} 

我发现属性术语缩略图存储在 table wp_posts 中。 'product_search_image_id' 字段 link 到 wp_posts table 中的 ID 字段。然后,与该术语关联的缩略图的 URL 列在同一 table 中的 'guid' 列下。我需要 PHP 的一些帮助来提取它。

<?php

function product_brand_image() {
    global $product;
    $attributes = $product->get_attributes();
    $attr_id = $attributes['pa_brand']['options'][0];
    $termMeta = get_term_meta($attr_id);
    if (is_array($termMeta) && array_key_exists('thumbnail_id', $termMeta)) {
        $termThumbnail = get_the_post_thumbnail_url($termMeta['thumbnail_id']);
    }
} 

您还可以请求可用尺寸,请参阅:https://developer.wordpress.org/reference/functions/get_the_post_thumbnail_url/

这是我得出的最终解决方案:

add_action('woocommerce_product_meta_end','product_brand_image');

function product_brand_image() {
    global $product;
    $attributes = $product->get_attributes();
    $attr_id = $attributes['pa_brand']['options'][0];
    $term = get_term($attr_id);
    $termSlug = $term->slug;
    $termMeta = get_term_meta($attr_id);
    if (is_array($termMeta) && array_key_exists('product_search_image_id', $termMeta)) {
        $post_id = $termMeta['product_search_image_id'][0];
        $postData = get_post($post_id);
        $prod_image_url = $postData->guid;
            echo '<span class="product_brand_image"><a href="/brand/'.$termSlug.'"><img src="'.$prod_image_url.'" /></a></span>';
    }
}

这会在产品元数据下方显示产品属性术语的缩略图,并将其链接到该术语的存档页面。在这种情况下,它链接到一个商店页面(存档),其中包含与特定 'brand' 关联的所有产品。请参阅下面的屏幕截图。

Screenshot