WooCommerce产品标题上方显示艺术家子分类报错修复
代码失效原因
- 核心报错原因:回调函数内直接调用
$product->get_id()等方法时,没有提前声明全局$product对象,也没有通过循环上下文获取产品实例,直接访问未定义变量会触发PHP致命错误,导致站点异常。 - 逻辑不符合需求:即使修复变量问题,原生
wc_get_product_category_list函数会默认输出产品绑定的所有层级产品分类,无法自动过滤父级分类、只保留作为艺术家名称的最末级子分类。
可直接使用的修复代码
add_action( 'woocommerce_shop_loop_item_title','add_artist_name', 9); function add_artist_name() { global $product; // 容错判断,避免非产品循环场景报错 if ( ! is_a( $product, 'WC_Product' ) ) { $product = wc_get_product( get_the_ID() ); } if ( ! $product ) return; // 获取产品关联的所有产品分类 $categories = get_the_terms( $product->get_id(), 'product_cat' ); if ( empty( $categories ) || is_wp_error( $categories ) ) return; $artist_term = null; foreach ( $categories as $term ) { // 筛选无下级分类的最末级项,即对应设置的艺术家子分类 $children = get_term_children( $term->term_id, 'product_cat' ); if ( empty( $children ) ) { $artist_term = $term; break; } } if ( $artist_term ) { // 仅输出艺术家名称,不带多余分类前缀 printf( '<span class="artist-name">%s</span>', esc_html( $artist_term->name ) ); } }
使用说明
- 将上述代码添加到当前主题/子主题的
functions.php文件,或自定义代码片段插件中即可生效 - 输出位置与测试时一致,固定显示在产品标题上方
- 代码自动过滤所有父级分类,仅输出作为艺术家名称的最末级子分类,不会展示多余分类内容
- 输出的艺术家名称外层包裹带
artist-name类的<span>标签,可通过自定义CSS调整字号、颜色、间距等显示样式
内容的提问来源于stack exchange,提问作者cfocket
相关产品推荐
相关产品推荐

