You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

合并WooCommerce订单与订阅标签:回调函数不存在报错求解

解决WooCommerce合并订单与订阅标签的回调函数问题

你遇到的报错核心原因是:woocommerce_account_subscriptions并不是一个全局可用的独立函数——WooCommerce Subscriptions插件是通过类方法来渲染订阅账户内容的,而非直接暴露全局函数。

正确的回调函数写法

Subscriptions插件负责渲染订阅列表的核心逻辑,封装在WC_Subscriptions_Account类的my_account_subscriptions静态方法中。你需要将动作回调改为这个类方法的引用形式。

完整可复用代码

以下是包含错误防护、功能完整的实现代码,直接加到你的主题functions.php或自定义插件中即可:

// 移除我的账户页面的订阅标签
add_filter( 'woocommerce_account_menu_items', 'remove_subscriptions_account_tab' );
function remove_subscriptions_account_tab( $menu_items ) {
    // 仅在Subscriptions插件激活时执行,避免报错
    if ( class_exists( 'WC_Subscriptions' ) ) {
        unset( $menu_items['subscriptions'] );
    }
    return $menu_items;
}

// 在订单标签页面插入订阅内容
add_action( 'woocommerce_account_orders_endpoint', 'add_subscriptions_content_to_orders_tab' );
function add_subscriptions_content_to_orders_tab() {
    // 确保Subscriptions插件已激活,防止类不存在的致命错误
    if ( class_exists( 'WC_Subscriptions_Account' ) ) {
        // 添加标题区分订单与订阅模块,提升页面可读性
        echo '<h2>' . __( 'My Subscriptions', 'woocommerce-subscriptions' ) . '</h2>';
        // 调用Subscriptions官方渲染方法,保证功能兼容性
        WC_Subscriptions_Account::my_account_subscriptions();
    }
}

额外优化提示

  1. 调整内容位置:如果想把订阅内容放在订单列表之前,只需将动作钩子改为woocommerce_account_orders_start即可。
  2. 样式调整:两个模块默认可能间距较近,可添加自定义CSS优化视觉体验:
.woocommerce-MyAccount-content h2:nth-of-type(2) {
    margin-top: 3rem;
    padding-bottom: 0.5rem;
    border-bottom: 1px solid #eee;
}

内容的提问来源于stack exchange,提问作者bugnumber9

火山引擎 最新活动