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

ef1yzkbh  于 11个月前  发布在  WordPress
关注(0)|答案(2)|浏览(170)

我做我的第一个主题,一切都进展真实的快速感谢循环和WooCommerce的SDK提供的所有援助。然后今天我花了一整天未能做一些简单的显示图像.经过一整天的挣扎,我唯一能学到的是,WP似乎没有提供获取类别的图像和许多人问这个问题多年的手段但我还是找不到一个方法来真正做到这一点......:(
我想做的是在我的商店上面创建一个滑块,显示精选的商店类别的图像。我希望能够输入一个术语名称列表,并基于此,我的函数应该以类别图像的形式生成指向产品类别的链接。
听起来很简单......事实证明,它远没有接近简单......在你离开并将其标记为重复问题之前,让我解释一下我为什么要问它......
我发现的一些解决方案要求我知道术语的ID,而不是术语名称。有些人说“使用自定义术语搜索获得ID”,但没有解释如何。我知道如何为帖子进行基于自定义分类的查询,但不为术语。文档在传递给查询术语的值方面让我感到困惑:(
其他解决方案要求我首先找到一个特定类别的产品,然后从那里向后找到产品的类别图像(?)
然后当然有默认的答案,人们喜欢给给予的一切:“哦,你正在设计自己的主题,并希望显示类别图标?简单,只需下载一个插件来为你做”.现在,为什么我没有想到只是包括别人的插件到我的主题?(facepalm)
其他答案只是显示如何打印术语名称列表,但到目前为止,还没有什么能让我做什么 * 应该 * 已经这么简单:

$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,似乎也没有获取缩略图/特色图像的选项。那么现在怎么办?
所以我去低级别,并开始直接使用$wpdb查询表,我确定我之后的术语具有term_id 94。我查询缩略图的帖子ID的termmeta表,我发现它是905。现在我转向我的帖子表,发现.没有帖子条目905!WTF?所以我这样做了两个类别,并找到同样的事情。找到图像的id结果是没有从尝试提取帖子的附件返回,因为没有帖子匹配图像的id.
为什么这是如此该死的硬?WordPress使一切如此令人难以置信的简单,但这个简单的听起来任务似乎是不可能做到的.所以现在,你看到我已经谷歌这个死亡和挣扎我的背了,我问这个问题出于绝望:
如何将product_cat术语名称数组转换为url数组以显示类别的图像?
谢谢

kkih6yb8

kkih6yb81#

最短的方法是使用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>';
}

vnzz0bqm

vnzz0bqm2#

我同意LoicTheAztez的回答,以下是我最近(在woocommerce更新后)如何获得任何术语的名称,缩略图和链接。

// Terms thumbnail grid helper function
function get_term_details($term_name) {
// use get_terms() to get the array of names
    $terms = get_terms( $term_name, array(
        'orderby'  => 'name',  /* orderby arguments ('name', 'slug','term_group', 'term_id', 'id', 'description') */
        'hide_empty' => false,
    ) );

    $term_details = array();

    foreach ( $terms as $term ) {
        $name = $term->name;
        $thumbnail = wp_get_attachment_url( get_term_meta($term->term_id, 'thumbnail_id', true) );
        $link = get_term_link( $term );
        
        $details = array(
            'name' => $name,
            'thumbnail' => $thumbnail,
            'link' => $link,
        );
        
        array_push($term_details, $details);
    }

    return $term_details;
}

字符串
这可以被称为:

$product_category_details = get_term_details('product_cat');

相关问题