Woocommerce如何在产品列表页为配置upsells的商品显示专属徽章
问题根源
- 原有代码中加入了
is_product()判断条件,该函数仅在单品详情页返回true,产品列表/归档页触发时条件不成立,因此无任何输出 - WooCommerce店铺循环的列表页中,全局
$product对象可正常调用upsell相关方法获取配置数据,无需额外预加载
修复方案
将你添加到functions.php的代码替换为以下内容即可:
add_action( 'woocommerce_before_shop_loop_item', 'related_upsell_products_badge', 15 ); function related_upsell_products_badge() { global $product; // 移除错误的单品页判断,仅校验产品对象是否存在 if ( isset( $product ) ) { $upsells = version_compare( WC_VERSION, '3.0', '<' ) ? $product->get_upsells() : $product->get_upsell_ids(); if ( count( $upsells ) > 0 ) { echo '<span class="more_variants">Finns i fler varianter</span>'; } } }
可选调整说明
- 如果不需要在单品页重复显示该徽章,可将判断条件修改为
if ( isset( $product ) && !is_product() ),即可仅在列表页显示 - 如果徽章显示位置不符合预期,可调整钩子优先级(将代码中的15改为更小的数值则位置更靠前,更大则更靠后),也可将钩子替换为
woocommerce_before_shop_loop_item_title、woocommerce_after_shop_loop_item_title等其他店铺循环内置钩子调整展示位置
内容的提问来源于stack exchange,提问作者Edvin Uddfalk
相关产品推荐
相关产品推荐

