You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:24:11