WooCommerce从YITH Brands切换至WC Brands后自定义代码适配咨询
问题
我运营的WooCommerce商店原本使用第三方插件YITH Brands实现产品品牌功能,因兼容性问题现已切换至官方插件WC Brands。但此前开发者编写的依赖YITH Brands的网站功能代码,在禁用该插件后完全失效——具体是在产品标题上方显示品牌名称的代码:
add_action( 'woocommerce_before_shop_loop_item_title', 'aq_display_brand_before_title' ); function aq_display_brand_before_title(){ global $product; $product_id = $product->get_id(); $brands = wp_get_post_terms( $product_id, 'yith_product_brand' ); foreach( $brands as $brand ) echo '<a href="'.get_term_link($brand->term_id).'">'.$brand->name.'</a>'; }
我在WC Brands文档中找到的类似代码无法在网站上显示内容:
add_action( 'woocommerce_single_product_summary', 'wc_brands_add_brand_name', 1 ); function wc_brands_add_brand_name() { global $product; $brands = implode(', ', wp_get_post_terms($product->get_id(), 'product_brand', ['fields' => 'names'])); echo "<p>Brand: " . $brands . "</p>"; }
请问能否修改第一段代码,使其调用WC Brands的相关变量,以保留原有功能并安全禁用YITH Brands?
解决方案
可以直接修改原有代码适配WC Brands,核心是替换分类法标识并增加基础错误判断,修改后的代码如下:
add_action( 'woocommerce_before_shop_loop_item_title', 'aq_display_brand_before_title' ); function aq_display_brand_before_title(){ global $product; // 安全判断:确保产品对象有效 if ( ! $product || ! is_a( $product, 'WC_Product' ) ) { return; } $product_id = $product->get_id(); // 替换为WC Brands的分类法:product_brand $brands = wp_get_post_terms( $product_id, 'product_brand' ); // 检查是否获取到品牌且无错误 if ( ! empty( $brands ) && ! is_wp_error( $brands ) ) { foreach( $brands as $brand ) { // 确保品牌链接有效 $brand_link = get_term_link( $brand ); if ( ! is_wp_error( $brand_link ) ) { echo '<a href="' . esc_url( $brand_link ) . '">' . esc_html( $brand->name ) . '</a>'; } } } }
修改说明:
- 替换分类法:将原代码中的
yith_product_brand替换为WC Brands使用的product_brand分类法标识,这是核心适配点 - 增加安全判断:添加产品对象有效性检查、品牌获取结果检查,避免因异常情况导致网站报错
- 增强输出安全性:使用
esc_url()和esc_html()对链接和文本进行转义,符合WordPress安全规范 - 保留原有逻辑:维持原有的钩子
woocommerce_before_shop_loop_item_title和品牌链接输出格式,确保显示位置和功能与之前完全一致
注意事项:
- 确保WC Brands插件已正常激活并完成品牌数据迁移(若有)
- 检查产品是否已正确关联WC Brands创建的品牌分类
- 修改后建议清除网站缓存,确保代码生效
内容的提问来源于stack exchange,提问作者Graham Toomey
相关产品推荐
相关产品推荐

