如何在创建WooCommerce API密钥时自动保存详情至用户元数据?
问题分析与解决方案
你的代码无法正常工作主要有3个核心原因:
- 选用的钩子
woocommerce_api_key_save时机或参数逻辑不符,导致无法正确获取密钥数据 - 直接访问
$key->user_id这类受保护属性,而非使用WooCommerce标准的getter方法获取值 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
相关产品推荐
相关产品推荐

