如何在WordPress产品循环中获取并显示当前产品分类
解决WooCommerce产品循环中获取并显示产品分类的问题
你当前代码里用$have_post->name获取产品分类是错误的——$have_post是WP_Post对象,不存在name属性;WooCommerce的产品分类属于自定义分类法product_cat,需要用WordPress的分类函数正确获取。
替换goods__text区域的代码
把<div class="goods__text"><?php echo $have_post->name; ?></div>替换为以下代码,即可正常显示产品分类:
<div class="goods__text"> <?php // 获取当前产品的product_cat分类 $product_categories = get_the_terms($have_post->ID, 'product_cat'); // 检查分类是否存在且无错误 if ($product_categories && !is_wp_error($product_categories)) { // 显示第一个分类的名称 echo esc_html($product_categories[0]->name); // 若要显示所有分类(用逗号分隔),可替换为下面的代码: // $cat_names = wp_list_pluck($product_categories, 'name'); // echo esc_html(implode(', ', $cat_names)); } ?> </div>
完整修改后的循环代码
如果需要直接替换整个循环代码,这里是完整版本:
<?php $args = array('post_type' => 'product'); $loop = new WP_Query($args); foreach ($loop->posts as $have_post) : ?> <div class="swiper-slide"> <a href="<?php echo get_post_permalink($have_post->ID); ?>" class="goods__item"> <div class="goods__text"> <?php $product_categories = get_the_terms($have_post->ID, 'product_cat'); if ($product_categories && !is_wp_error($product_categories)) { echo esc_html($product_categories[0]->name); } ?> </div> <div class="goods__img"> <?php echo get_the_post_thumbnail($have_post->ID, 'full', array('alt' => $have_post->post_title, 'data-product_id' => $have_post->ID)); ?> </div> <div class="goods__name"><?php echo $have_post->post_title; ?></div> <div class="goods__price"> <?php $price = get_post_meta($have_post->ID, '_price', true); echo $price; ?> руб. </div> </a> </div> <?php endforeach; ?>
关键说明
get_the_terms():用于获取指定产品所属的product_cat分类,参数为产品ID和分类法标识。esc_html():对分类名称进行转义,避免XSS安全风险。- 若产品未分配任何分类,代码会自动跳过显示,防止报错。
内容的提问来源于stack exchange,提问作者Anton Kondratovich
相关产品推荐
相关产品推荐

