WooCommerce变体名称含空格时下拉选项价格显示失效问题
问题根源
woocommerce_variation_option_name过滤器传入的$term是属性的前台展示名,保留原始空格、大小写,比如20 kg就是原样传入- 你从
$variation['attributes']中读取的属性值是经过WordPress slug化处理后的结果:空格会被替换为连字符、大写统一转小写,所以20 kg对应的存储值为20-kg - 代码中直接用
===全等判断两个值,带空格的变体名称自然匹配失败;无空格的变体名slug和原始名称完全一致,所以可以正常追加价格。
修复方案
调整匹配逻辑,将传入的$term也做相同的slug化处理后再对比即可,同时可以优化原有代码中多属性变体直接终止循环的问题:
function display_price_in_variation_options( $term ) { $product = wc_get_product(); $id = $product->get_id(); if ( empty( $term ) || empty( $id ) ) { return $term; } if ( ! $product->is_type( 'variable' ) ) { return $term; } $product_variations = $product->get_available_variations(); $term_slug = sanitize_title( $term ); // 把传入的展示名转成slug格式,和存储值对齐 foreach ( $product_variations as $variation ) { // 跳过多属性变体,不要直接return避免终止整个循环 if ( count( $variation['attributes'] ) > 1 ) { continue; } $attribute = array_values( $variation['attributes'] )[0]; // 用slug格式对比 if ( $attribute === $term_slug ) { $term .= ' (' . wp_strip_all_tags( wc_price( $variation['display_price'] ) ) . ')'; break; // 匹配到就退出循环,避免重复追加 } } return $term; } add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_options' );
内容的提问来源于stack exchange,提问作者public9nf
相关产品推荐
相关产品推荐

