You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce我的账户订阅页面添加带元数据的新列

解决WooCommerce订阅账户页面添加自定义列失效问题

你遇到的核心问题是嵌套函数导致钩子未正确注册,同时部分逻辑可以优化。以下是修正后的代码,完全通过自定义函数实现,无需修改模板:

修正后的完整代码

// 确保在插件加载完成后执行逻辑
add_action( 'plugins_loaded', 'custom_woo_subscriptions_add_columns' );

function custom_woo_subscriptions_add_columns() {
    // 加载插件检查所需的核心文件
    if ( ! function_exists( 'is_plugin_active' ) ) {
        require_once ABSPATH . '/wp-admin/includes/plugin.php';
    }

    // 验证WooCommerce和Subscriptions插件是否激活
    if ( is_plugin_active( 'woocommerce/woocommerce.php' ) && class_exists( 'WC_Subscriptions' ) ) {
        // 注册列添加过滤器
        add_filter( 'wcs_account_subscriptions_columns', 'custom_wcs_account_subscriptions_columns', 10 );
        // 注册列内容输出动作
        add_action( 'woocommerce_my_account_my_subscriptions_column_subscription_name', 'custom_subscription_name_column_content' );
        add_action( 'woocommerce_my_account_my_subscriptions_column_subscription_address', 'custom_subscription_address_column_content' );
    }
}

// 定义新增的列
function custom_wcs_account_subscriptions_columns( $columns ) {
    $new_columns = array(
        'subscription_name'    => __( 'Name', 'woocommerce-subscriptions' ),
        'subscription_address' => __( 'Address', 'woocommerce-subscriptions' )
    );

    // 将新列合并到现有列的最前面
    return array_merge( $new_columns, $columns );
}

// 输出「Name」列的内容
function custom_subscription_name_column_content( $subscription ) {
    // 替换为你实际存储的元数据键名
    $name = $subscription->get_meta( 'your_name_meta_key', true );
    echo esc_html( $name ? $name : __( 'N/A', 'woocommerce-subscriptions' ) );
}

// 输出「Address」列的内容
function custom_subscription_address_column_content( $subscription ) {
    // 替换为你实际存储的元数据键名
    $address = $subscription->get_meta( 'your_address_meta_key', true );
    echo esc_html( $address ? $address : __( 'N/A', 'woocommerce-subscriptions' ) );
}

关键修正点说明

  1. 移除嵌套函数:WordPress中嵌套函数会导致钩子注册时机不可控,甚至无法触发。将所有函数放在全局作用域,通过plugins_loaded动作确保在插件加载完成后执行。
  2. 优化插件检查逻辑:使用is_plugin_active函数替代直接读取选项,同时确保plugin.php核心文件已加载,避免函数未定义错误。
  3. 规范元数据读取:通过$subscription->get_meta()方法正确读取订阅的自定义元数据,替换代码中的your_name_meta_key和your_address_meta_key为你实际存储的键名即可。
  4. 明确钩子优先级:显式设置钩子优先级为10(默认值),确保逻辑在默认列之后执行,避免冲突。

验证步骤

  1. 将上述代码添加到你的自定义插件文件(或子主题的functions.php)中。
  2. 保存文件并激活插件/刷新主题设置。
  3. 登录前端用户账户,访问/my-account/subscriptions/页面,即可看到新增的列及对应元数据内容。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:48:15