自定义WooCommerce商品分类小工具 添加“全部”商店归档链接
WooCommerce 旧版Product Category小工具自定义方案
钩子接入修改方案(轻量首选)
可以通过WooCommerce内置的过滤器钩子直接修改旧版Product Category小工具的输出,不需要重写整个小工具,适合仅添加「All」链接的需求。
将以下代码添加到主题functions.php文件或自定义插件中即可生效:
// 给旧版WooCommerce商品分类小工具添加All跳转链接 add_filter('woocommerce_product_categories_widget_html', 'custom_add_all_category_link_to_widget', 10, 2); function custom_add_all_category_link_to_widget($html, $args) { // 获取Shop存档页链接 $shop_url = get_permalink( wc_get_page_id( 'shop' ) ); // 构造All链接的HTML $all_link = '<li class="cat-item cat-item-all"><a href="'.esc_url($shop_url).'">'.esc_html__('All', 'your-text-domain').'</a></li>'; // 把All链接插入到分类列表的最前面 $html = str_replace('<ul class="product-categories">', '<ul class="product-categories">'.$all_link, $html); return $html; }
注意:代码中
your-text-domain需要替换为你的主题/插件对应的文本域,方便多语言适配。
子类重写注册新小工具方案(适合重度自定义)
如果你的需求不止是加All链接,还需要修改分类查询逻辑、输出结构等更多自定义内容,最优方式是继承原有小工具类重写后注册新的小工具,实现逻辑如下:
// 注册自定义商品分类小工具 add_action('widgets_init', 'custom_register_product_category_widget'); function custom_register_product_category_widget() { // 可选:注销原有旧版小工具,如果不需要保留原有小工具的话可取消注释 // unregister_widget('WC_Widget_Product_Categories'); // 注册自定义小工具 register_widget('Custom_WC_Widget_Product_Categories'); } // 继承原有小工具类重写逻辑 class Custom_WC_Widget_Product_Categories extends WC_Widget_Product_Categories { // 重写输出方法 public function widget($args, $instance) { // 先执行原有的小工具输出前置逻辑 $this->widget_start($args, $instance); // 输出All链接 echo '<ul class="product-categories">'; echo '<li class="cat-item cat-item-all"><a href="'.esc_url(get_permalink( wc_get_page_id( 'shop' ))).'">'.esc_html__('All', 'your-text-domain').'</a></li>'; // 调用原有的分类列表输出逻辑 $this->list_categories($instance); echo '</ul>'; // 执行原有的小工具输出后置逻辑 $this->widget_end($args); } }
方案选择建议
- 仅添加「All」链接:优先选择钩子方案,代码量小,兼容性高,后续WooCommerce更新小工具逻辑时受影响概率更低
- 需要修改原有小工具的查询规则、输出结构等复杂需求:选择子类重写方案,逻辑可控度更高,不会因为钩子调整导致自定义内容失效
内容的提问来源于stack exchange,提问作者Syrehn
相关产品推荐
相关产品推荐

