WordPressサイトに決済サービス(Stripeなど)や外部メール配信(SMTP)、さらに生成AI(OpenAI・Gemini・Claudeなど)のAPIキーを設定する際、これまでのプラグイン開発ではデータベースのwp_optionsテーブルへ平文のまま保存する実装が一般的でした。しかしWordPress 7.2では、こうした機密情報を暗号化して安全に保管する「Secrets API」が新たに導入され、あわせてブロックエディタへ独自のSVGアイコン群を標準登録できる「Icon Registration API」の統合も進んでいます。
この2つのコアAPIを活用すると、データベースのバックアップ流出やステージング複製時にAPIキーが露出するリスクを抑えつつ、Dashiconsフォントに頼らない軽量な独自SVGアイコンをブロックエディタ上で一元管理できます。本記事では、両APIの仕組みと基本的なPHP実装コードを図解とともに整理します。
この記事でわかること
- 従来のwp_options平文保存が抱えていたリスクとSecrets APIの暗号化構造
- wp_set_secret()・wp_get_secret()・WP_Secretオブジェクトの具体的な使い方
- Icon Registration APIで独自SVGアイコンをブロックエディタへ追加する手順
- WordPress 7.2に向けたプラグイン・テーマ実装時のチェックポイント
従来のAPIキー保存方式が抱えていた課題とSecrets API
これまで多くのWordPressプラグインは、管理画面のフォームから入力された外部サービスのAPIキーやシークレットトークンをupdate_option()でwp_optionsテーブルにそのまま保存していました。この方式は実装が手軽である反面、SQLダンプによるバックアップファイルや、制作会社・開発者へ共有するステージング環境のデータベース複製に本番用のAPIキーが平文のまま含まれてしまうというセキュリティ上の課題がありました。

さらに、get_option()には標準でフィルターフックが用意されているため、サイト内に導入された別のプラグインから値を傍受・参照される経路も存在していました。WordPress 7.2のSecrets APIは、こうした課題をコア標準の暗号化レイヤーによって解決します。
- wp-config.phpのマスター鍵を用いたエンベロープ暗号化:復号に必要なマスター鍵はファイルシステム側(wp-config.php)に分離されるため、万が一データベース単体のダンプが外部へ流出しても平文のAPIキーを復元できません。
- 取得時のフィルターフックを廃止:wp_get_secret()には意図的にフィルターフックが設けられておらず、他のプラグインがフック経由で復号済みのシークレットを横取りすることを防ぎます。
- 鍵のローテーションへの対応:暗号化キーの更新(ローテーション)を見据えたバージョンスロット管理とWP-CLI連携が組み込まれています。
Secrets APIの3つの基本関数とPHP実装コード
Secrets APIは、キーの保存・取得・削除を行う3つのシンプルな関数と、誤出力を防ぐ値オブジェクト(WP_Secret)で構成されています。

主要な関数と役割
| 関数・メソッド名 | 主な役割 | 戻り値と特徴 |
|---|---|---|
| wp_set_secret( $name, $value ) | 機密文字列を暗号化して保存する | 成功時はtrue、暗号化失敗時などはWP_Errorを返す |
| wp_get_secret( $name ) | 保存された機密情報を取得する | WP_Secretオブジェクト(未登録時はnull、復号失敗時はWP_Error) |
| $secret->reveal() | WP_Secretから平文の文字列を取り出す | API通信の直前など、実際に値が必要な場面でのみ明示的に呼び出す |
| wp_delete_secret( $name ) | 保存済みのシークレットを削除する | プラグインのアンインストール時や連携解除時に使用する |
保存と取得の実装コード例
キー名($name)には、他のプラグインとの衝突を避けるため「プラグインスラッグ/キー名」という名前空間形式で指定します。また、wp_get_secret()が返すWP_Secretオブジェクトは、var_dump()やエラーログへそのまま出力されても平文がマスクされる設計になっており、->reveal()を呼んだときだけ生の文字列を返します。
// 1. 管理画面の保存処理(権限チェック・Nonce検証後に実行)
function my_plugin_save_api_key( string $raw_api_key ) {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
if ( function_exists( 'wp_set_secret' ) ) {
$result = wp_set_secret( 'my-plugin/external-api-key', $raw_api_key );
if ( is_wp_error( $result ) ) {
error_log( 'Secret save error: ' . $result->get_error_message() );
}
}
}
// 2. 外部APIリクエスト時の取得処理
function my_plugin_call_external_service() {
if ( ! function_exists( 'wp_get_secret' ) ) {
return;
}
$secret = wp_get_secret( 'my-plugin/external-api-key' );
if ( is_wp_error( $secret ) || null === $secret ) {
return;
}
// 通信ヘッダーへセットする直前でreveal()を呼び出す
$response = wp_remote_post( 'https://api.example.com/v1/generate', array(
'headers' => array(
'Authorization' => 'Bearer ' . $secret->reveal(),
'Content-Type' => 'application/json',
),
'timeout' => 15,
) );
return $response;
}
Icon Registration APIとは?独自SVGアイコンの標準登録
WordPress 7.2で管理画面のアイコンがDashiconsフォントからインラインSVGへ移行する動きと連動し、テーマやプラグインが独自のSVGアイコンセットをWordPressコアへ登録するための標準規格として整備されているのがIcon Registration APIです。

コレクションと個別SVGアイコンの2段階登録
Icon Registration APIでは、まずアイコンのグループ(コレクション)を登録し、その名前空間の下に個別のSVGアイコンを登録します。登録されたアイコンは自動的にwp_ksesによるサニタイズ(無害化)を通過し、安全なSVG要素(pathやpolygonなど)のみが保持されます。
add_action( 'init', function () {
if ( ! function_exists( 'wp_register_icon_collection' ) || ! function_exists( 'wp_register_icon' ) ) {
return;
}
// 1. アイコンコレクション(グループ)の登録
wp_register_icon_collection(
'my-theme-icons',
array(
'label' => 'テーマ専用アイコン',
'description' => 'サイト内で共通利用するSVGアイコンセット',
)
);
// 2. 個別SVGアイコンの登録
wp_register_icon(
'my-theme-icons/check-badge',
array(
'label' => 'チェックバッジ',
'file_path' => get_template_directory() . '/assets/icons/check-badge.svg',
)
);
} );
登録したアイコンは、ブロックエディタのアイコンパネル(ピッカー)に選択肢として表示されるほか、REST APIエンドポイント(wp/v2/icon-collectionsおよびwp/v2/icons)やPHP関数(wp_get_icon)からも統一された方法で呼び出せます。
プラグイン・テーマ開発での導入チェックポイント
Secrets APIおよびIcon Registration APIを既存のサイトやプラグインへ導入する際は、以下の4点を確認しておくとスムーズに移行できます。

- wp-config.phpの暗号化キー設定を確認する:Secrets APIはwp-config.php内の暗号化キー定義を前提として動作します。保存処理(wp_set_secret)の戻り値がWP_Errorになっていないかを必ずチェックしてください。
- function_exists()で後方互換性を確保する:配布用プラグインやテーマで複数のWordPressバージョンをサポートする場合は、function_exists(‘wp_get_secret’)で関数の有無を判定し、未対応環境向けのフォールバックを用意します。
- 名前空間(slug/key)を統一する:Secrets APIのキー名とIcon Registration APIのアイコン名は、どちらも「スラッグ/識別子」の形式で命名規則を揃えておくと保守しやすくなります。
- SVGファイルから不要なタグや属性を省く:Icon Registration APIはセキュリティ保護のためscript要素や一部の複雑な属性をサニタイズ時に除去します。シンプルなpath要素とviewBox属性で構成されたSVGを用意してください。
まとめ:コア標準のセキュリティ基盤とSVG管理を取り入れよう
WordPress 7.2の「Secrets API」と「Icon Registration API」は、これまで各プラグインが独自に抱えていた「APIキーの保護」と「カスタムSVGアイコンの管理」を、WordPress本体の標準機能へと引き上げる重要なアップデートです。
本記事の要点まとめ
- 外部サービスのAPIキーやトークンは、wp_optionsの平文保存からSecrets API(wp_set_secret / wp_get_secret)へ移行する
- WP_Secretオブジェクトの値は、通信直前にreveal()メソッドで取り出してログ露出を防ぐ
- 独自のSVGアイコンはIcon Registration APIでコレクション登録し、エディタとPHPテンプレートの双方で安全に再利用する
外部AI連携や決済機能を扱うプラグイン開発、そしてブロックテーマのUI改善を行う際は、ぜひこの2つの標準APIを活用してみてください。
