如何覆写WooCommerce商品捆绑插件函数获取底层商品永久链接
解决WooCommerce Product Bundles捆绑商品永久链接覆写问题
你的问题出在没有正确接收和使用过滤器传递的参数上,导致get_permalink()默认获取了当前页面(也就是商品捆绑包本身)的链接,而不是你需要的底层关联商品链接。
错误原因分析
原插件的woocommerce_bundled_item_permalink过滤器会传递两个核心参数:
- 插件默认生成的永久链接字符串
- 当前的
WC_Bundled_Item对象(包含了底层关联商品的完整信息)
但你的代码存在两个关键疏漏:
- 没有在
add_filter中声明要接收2个参数(WordPress默认只传递1个参数) - 函数
get_bundle_product_permalink未接收这两个参数,调用get_permalink()时未指定目标商品,自然返回当前页面(捆绑包)的链接
正确的覆写代码
把你在functions.php里的代码替换成下面这段:
add_filter( 'woocommerce_bundled_item_permalink', 'get_bundle_product_permalink', 10, 2 ); function get_bundle_product_permalink( $default_permalink, $bundled_item ) { // 确认底层商品存在且可见,返回它的永久链接 if ( $bundled_item->product && $bundled_item->product->is_visible() ) { return $bundled_item->product->get_permalink(); } // 如果商品不可见,返回空字符串(保持原插件的逻辑一致性) return ''; }
代码细节解释
add_filter的第四个参数2:明确告诉WordPress这个过滤器函数需要接收2个参数- 函数参数
$bundled_item:直接获取插件传递的当前捆绑商品对象,通过$bundled_item->product就能拿到关联的底层商品实例 - 保留了原函数的商品可见性判断,避免返回无效或不可访问的商品链接
这样修改后,捆绑商品的永久链接就会正确指向它关联的底层商品了。
内容的提问来源于stack exchange,提问作者Justus
相关产品推荐
相关产品推荐

