Woocommerce自定义短描述内容仅登录用户可见未登录访客不显示问题
可能原因与修复方案
1. 静态缓存导致
绝大多数这类登录/未登录显示差异的问题都是缓存导致:站点一般会对未登录访客生成静态缓存页面,登录用户则直接返回动态渲染内容。你新增的自定义内容没有更新到未登录用户的缓存版本里,所以看不到。
- 解决:清理站点缓存插件、服务器CDN/页面缓存,同时可以配置缓存规则,将产品页短描述区域设置为动态片段不缓存。
2. 代码逻辑兼容性问题
你当前的代码依赖全局$product对象和get_the_ID()获取产品信息,部分场景下(比如未登录用户访问时、其他插件修改了全局查询),全局变量没有正确初始化,会导致has_term判断不生效,另外你注册过滤器时声明了接受2个参数,但函数没有用到第二个参数,属于不规范写法,也容易出问题。
- 修复后的代码示例:
add_filter('woocommerce_short_description', 'EPREL_content', 20, 1); // 优先级调整为20,晚于其他插件的逻辑执行 function EPREL_content( $EPRELlabel ) { // 先判断是否在产品页、拿到正确的产品对象 if ( ! is_product() ) return $EPRELlabel; $product = wc_get_product( get_the_ID() ); if ( ! $product instanceof WC_Product ) return $EPRELlabel; $product_tags = array( 'EPREL' ); if( has_term( $product_tags, 'product_tag', $product->get_id() ) ) { $sku = esc_attr($product->get_sku()); // 做好属性转义避免安全问题 $EPRELlabel .= '<div class="custom_content"><a data-elementor-open-lightbox="yes" href="/EPREL/EUEVK_'.$sku.'.png"><img src="https://econlux.de/EPREL/G.svg" width="80px" /></a><br /><a class="mini" target="_blank" href="/EPREL/EUEVK_'.$sku.'.png.pdf">Produktdatenblatt</a></div>'; } return $EPRELlabel; }
3. YITH询价插件冲突
YITH Request a Quote插件会修改产品页的渲染逻辑,如果你当前的钩子优先级比插件的钩子优先级高,就会出现你的代码先执行,插件后续修改短描述输出时把你追加的内容抹掉的情况。上面修复代码里已经把优先级调整为20,确保在插件逻辑执行之后再追加内容,如果还是不行可以临时禁用YITH插件测试,确认是否是插件冲突导致。
内容的提问来源于stack exchange,提问作者nici-
相关产品推荐
相关产品推荐

