如何为WooCommerce商品图片添加分类术语至Alt与Title属性
解决WooCommerce商品图片Alt/Title添加标题与分类术语的问题
你需要给WooCommerce商品图片的alt和title属性添加商品标题、默认商品分类(product_cat)、自定义分类artwork-category和artwork-materials的术语,原代码仅实现了标题部分,以下是修改后的完整解决方案:
add_filter('wp_get_attachment_image_attributes', 'change_attachement_image_attributes', 20, 2); function change_attachement_image_attributes( $attr, $attachment ){ // 获取商品ID(图片所属的父级商品) $parent = get_post_field( 'post_parent', $attachment); // 后台环境或非商品直接返回原属性 $type = get_post_field( 'post_type', $parent); if( is_admin() || $type != 'product' ){ return $attr; } // 获取商品标题 $title = get_post_field( 'post_title', $parent); // 处理商品分类(product_cat) $product_cat_terms = get_the_terms($parent, 'product_cat'); $product_cat = ''; if ( !is_wp_error($product_cat_terms) && $product_cat_terms ) { $product_cat_names = wp_list_pluck($product_cat_terms, 'name'); $product_cat = implode(', ', $product_cat_names); } // 处理自定义分类artwork-category $artwork_cat_terms = get_the_terms($parent, 'artwork-category'); $artwork_cat = ''; if ( !is_wp_error($artwork_cat_terms) && $artwork_cat_terms ) { $artwork_cat_names = wp_list_pluck($artwork_cat_terms, 'name'); $artwork_cat = implode(', ', $artwork_cat_names); } // 处理自定义分类artwork-materials $artwork_material_terms = get_the_terms($parent, 'artwork-materials'); $artwork_material = ''; if ( !is_wp_error($artwork_material_terms) && $artwork_material_terms ) { $artwork_material_names = wp_list_pluck($artwork_material_terms, 'name'); $artwork_material = implode(', ', $artwork_material_names); } // 构建目标格式的文本 $alt_title_text = $title; // 添加artwork-category和product_cat部分 if ( $artwork_cat || $product_cat ) { $artwork_part = $artwork_cat ? "a $artwork_cat" : ''; $product_part = $product_cat ? "by $product_cat" : ''; $middle_part = trim("$artwork_part $product_part"); if ( $middle_part ) { $alt_title_text .= ", $middle_part"; } } // 添加artwork-materials部分 if ( $artwork_material ) { $alt_title_text .= ". $artwork_material"; } // 赋值给alt和title属性 $attr['alt'] = $alt_title_text; $attr['title'] = $alt_title_text; return $attr; }
关键修改说明
- 修正分类获取的ID:将原代码中的
$post->ID替换为$parent,确保获取的是当前商品的分类数据,避免上下文错误 - 分类术语安全处理:对每个分类的返回结果做错误校验,使用
wp_list_pluck提取术语名称,再用implode转为逗号分隔的字符串,支持多分类场景 - 动态格式适配:根据各分类是否存在,自动调整输出内容,避免出现"a by ..."或多余标点的异常格式
- 容错机制:针对
get_the_terms可能返回的错误或空值做判断,防止PHP警告输出
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

