如何移除WooCommerce产品附加信息栏属性列表的链接?
解决WooCommerce产品属性值的链接移除问题
关于替代参数的疑问
首先明确:$product_attribute数组里确实包含'name'(属性的显示名称)和'slug'(属性的别名,比如pa_color),但这两个都是属性本身的标识,不是你要的属性值内容。直接替换成slug或name只会显示属性名(比如“颜色”),而不是具体的属性值(比如“红色”),所以没法直接用它们替代value来实现需求。
移除链接的两种有效方法
方法1:直接剥离HTML标签(最简单通用)
当前代码里的wp_kses_post( $product_attribute['value'] )会保留WooCommerce自动生成的<a>链接标签,我们只需要用strip_tags()过滤掉所有HTML标签,就能得到纯文本属性值:
<td class="woocommerce-product-attributes-item__value"><?php echo strip_tags( wp_kses_post( $product_attribute['value'] ) ); ?></td>
这样处理后,不管是分类式属性(带链接)还是自定义文本属性,都会只显示纯文本,同时wp_kses_post先做安全过滤,再用strip_tags剥标签,能避免XSS风险。
方法2:针对分类属性精准获取纯文本(更可控)
如果你的属性是WooCommerce的产品分类属性(比如颜色、尺寸这类通过后台术语管理的属性),可以直接获取术语对象来拿到无链接的名称,这种方法更精准:
<td class="woocommerce-product-attributes-item__value"> <?php // 判断当前属性是否是分类式属性 if ( taxonomy_exists( $product_attribute['name'] ) ) { // 通过属性值的slug获取术语对象 $term = get_term_by( 'slug', $product_attribute['value'], $product_attribute['name'] ); // 如果术语存在,输出纯文本名称,否则输出原始值 echo $term ? esc_html( $term->name ) : esc_html( $product_attribute['value'] ); } else { // 自定义文本属性,直接输出纯文本 echo esc_html( $product_attribute['value'] ); } ?> </td>
重要提醒
修改WooCommerce模板时,不要直接修改核心模板文件!建议把/woocommerce/templates/single-product/product-attributes.php复制到你的子主题目录/your-child-theme/woocommerce/single-product/下,再修改子主题里的文件,这样主题或WooCommerce更新时不会覆盖你的修改。
内容的提问来源于stack exchange,提问作者2CANadv
相关产品推荐
相关产品推荐

