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

如何在创建WooCommerce API密钥时自动保存详情至用户元数据?

问题分析与解决方案

你的代码无法正常工作主要有3个核心原因:

  1. 选用的钩子woocommerce_api_key_save时机或参数逻辑不符,导致无法正确获取密钥数据
  2. 直接访问$key->user_id这类受保护属性,而非使用WooCommerce标准的getter方法获取值
  3. WC()->api->get_key()方法在新版WooCommerce中已被弃用,密钥查询方式失效

修正后的代码

以下代码可实现创建/更新API密钥时,自动将密钥详情同步到关联用户的元字段:

// 监听API密钥创建事件
add_action('woocommerce_created_api_key', 'sync_api_key_to_user_meta', 10, 1);
// 监听API密钥更新事件(可选,如需同步更新操作)
add_action('woocommerce_updated_api_key', 'sync_api_key_to_user_meta', 10, 1);

function sync_api_key_to_user_meta($key) {
    // 校验对象类型,避免无效操作
    if (!$key instanceof WC_API_Key) {
        return;
    }

    $user_id = $key->get_user_id();
    // 确保关联用户ID有效
    if (empty($user_id)) {
        return;
    }

    // 保存密钥详情到用户元字段
    update_user_meta($user_id, 'woocommerce_api_key_id', $key->get_id());
    update_user_meta($user_id, 'woocommerce_api_consumer_key', $key->get_consumer_key());
    // 保存哈希后的密钥(WooCommerce默认存储的是哈希值)
    update_user_meta($user_id, 'woocommerce_api_consumer_secret_hash', $key->get_consumer_secret());
    update_user_meta($user_id, 'woocommerce_api_key_permissions', $key->get_permissions());
}

额外说明(如需存储明文密钥)

注意:存储明文API密钥存在极高安全风险,仅在特殊场景下谨慎使用。如果需要捕获创建时的明文Consumer Secret,可添加以下钩子:

add_action('woocommerce_pre_create_api_key', 'sync_plain_api_secret_to_user_meta', 10, 1);

function sync_plain_api_secret_to_user_meta($data) {
    if (empty($data['user_id'])) {
        return;
    }
    // 存储明文密钥(请务必做好数据加密或权限控制)
    update_user_meta($data['user_id'], 'woocommerce_api_consumer_secret_plain', $data['consumer_secret']);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:15:09