如何按商品分类显示WooCommerce自定义字段并隐藏空字段
WooCommerce单品页面按分类显示自定义字段优化方案
你现有的代码已经实现了基础的自定义字段展示,下面是针对你需求优化后的代码,既支持按分类显示对应字段,也会自动隐藏空值字段:
// 按分类在WooCommerce单品页面显示对应自定义字段 add_action('woocommerce_single_product_summary', 'wpsh_single_posts_custom_meta_fields', 10 ); function wpsh_single_posts_custom_meta_fields(){ $post_id = get_the_ID(); // 定义分类与对应字段的映射关系,后续新增分类/字段直接修改这里即可 $category_fields_map = [ 'artworks' => [ // 分类slug,注意是英文slug不是名称 'month_year' => 'PRODUCT YEAR', 'art_size' => 'ART SIZE' ], 'bags' => [ 'month_year' => 'PRODUCT YEAR', 'crt_price' => 'CRT PRICE' ], 'crafts' => [ 'craft_size' => 'CRAFT SIZE', 'material' => 'MATERIAL', 'weight' => 'WEIGHT' ] ]; // 获取当前商品所属的分类slug $product_categories = wp_get_post_terms($post_id, 'product_cat', ['fields' => 'slugs']); // 遍历分类映射,找到匹配的分类 foreach($category_fields_map as $cat_slug => $fields){ if(in_array($cat_slug, $product_categories)){ // 遍历当前分类需要显示的字段 foreach($fields as $meta_key => $label){ $meta_value = get_post_meta($post_id, $meta_key, true); // 直接获取单个值,不用数组 // 非空才输出 if(!empty($meta_value)){ echo '<p class="custom-field-' . esc_attr($meta_key) . '"> <span style="font-weight: bold; color: #4cbb17;">' . esc_html($label) . '</span>: ' . esc_html($meta_value) . '</p>'; } } break; // 匹配到对应分类后停止遍历 } } }
代码关键点说明:
- 灵活的映射配置:通过
$category_fields_map数组统一管理分类和字段的对应关系,后续要新增分类或调整字段,直接修改这个数组就行,不用改逻辑代码 - 分类判断:用
wp_get_post_terms获取商品的分类slug,避免中文名称的编码问题,匹配更准确 - 空值过滤:每个字段都会先判断值是否为空,只有非空时才输出,自动隐藏未填写的字段
- 安全输出:用
esc_attr和esc_html处理输出内容,避免XSS安全问题 - 统一样式:每个字段的HTML类名用
custom-field-元键的格式,方便后续通过CSS统一调整样式
注意:代码里的分类是用分类slug(比如Artworks分类的slug如果是artworks就用这个),你可以在WooCommerce后台的产品分类页面查看每个分类的slug,确保和代码里的一致。
内容的提问来源于stack exchange,提问作者Gamicord
相关产品推荐
相关产品推荐

