WordPress电商站:替换商品标题上方品牌文字为对应品牌Logo
问题分析与解决方案
你的代码没生效主要有3个核心问题:
- 条件判断错误:用了
is_product_category()(判断是否是商品分类归档页),但你要修改的是单个商品页面的标题,应该用is_product() - 缺少品牌匹配逻辑:原代码没有判断当前商品属于哪个品牌,无法针对性替换Logo
- 图片路径硬编码且未适配品牌:
image.png是固定路径,没有根据品牌切换对应Logo
修正后的代码示例
假设你的品牌是通过WooCommerce的「产品属性」(比如属性slug为brand)来管理的,或者用自定义字段存储品牌名称,以下是适配的代码:
// 移除默认商品标题钩子 remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5); // 添加自定义标题钩子 add_action('woocommerce_single_product_summary', 'custom_template_single_title', 5); function custom_template_single_title() { // 仅在单个商品页面执行 if (is_product()) { global $product; // 获取商品品牌(根据你的实际存储方式调整) // 方式1:如果用WooCommerce产品属性(属性slug为brand) $brand_terms = wc_get_product_terms($product->get_id(), 'brand', array('fields' => 'names')); $brand = !empty($brand_terms) ? $brand_terms[0] : ''; // 方式2:如果用自定义字段(字段名为product_brand) // $brand = get_post_meta($product->get_id(), 'product_brand', true); // 定义品牌与Logo的对应关系 $brand_logos = array( '品牌A' => get_template_directory_uri() . '/images/brand-a-logo.png', '品牌B' => get_template_directory_uri() . '/images/brand-b-logo.png', // 继续添加更多品牌 ); // 开始输出标题 echo '<h1 itemprop="name" class="product_title entry-title">'; // 如果当前商品有匹配的品牌,输出Logo,否则输出品牌文字(可选) if (!empty($brand) && isset($brand_logos[$brand])) { echo '<img src="' . esc_url($brand_logos[$brand]) . '" alt="' . esc_attr($brand) . '" style="margin-bottom: 10px; display: block;">'; } elseif (!empty($brand)) { echo '<span class="brand-text">' . esc_html($brand) . '</span>'; } // 输出商品标题 echo esc_html($product->get_title()) . '</h1>'; } }
关键调整说明
- 条件修正:用
is_product()确保代码只在单个商品页面运行 - 品牌获取:根据你实际的品牌存储方式选择对应代码(产品属性/自定义字段),如果是用第三方品牌插件,需要替换成插件对应的获取方法
- Logo路径:用
get_template_directory_uri()获取主题目录绝对路径,避免相对路径失效,记得把Logo图片放在主题的images文件夹下,或者修改路径到你的存储位置 - 安全处理:用
esc_url()、esc_attr()、esc_html()处理输出内容,避免XSS安全问题
额外排查点
- 确保代码添加到当前启用主题的
functions.php文件,不要添加到父主题(如果用子主题的话) - 清除WordPress缓存和浏览器缓存,避免旧代码残留
- 检查品牌名称的大小写、空格是否和
$brand_logos数组里的键完全匹配
内容的提问来源于stack exchange,提问作者Davesh Thakur
相关产品推荐
相关产品推荐

