get_plugin_data() は、プラグインのメインのファイルの頭にある見出し(Plugin Name・Version・Update URI など)を読んで、配列で返す関数です。自分のプラグインのバージョンを見出しから読むときや、インストールしているプラグインの見出しを 1 つだけ調べるときに使います。
書き方
get_plugin_data( string $plugin_file, bool $markup = true, bool $translate = true ): array
$plugin_file:プラグインのメインのファイルの絶対パス(例:WP_PLUGIN_DIR . '/my-sample/my-sample.php')$markup:true なら、名前や作者に HTML のリンクなどを付けて返す。値だけほしいときは false$translate:true なら、プラグインの翻訳で名前や説明を訳して返す。値だけほしいときは false- 戻り値:見出しの配列。書いていない見出しは空の文字列
見出しの名前と、配列のキーは次のとおりです。キーには空白がないので、Update URI は UpdateURI になります。
| 見出し | 配列のキー |
|---|---|
| Plugin Name | Name(Title も同じ値) |
| Plugin URI | PluginURI |
| Version | Version |
| Description | Description |
| Author・Author URI | Author・AuthorURI(AuthorName も) |
| Text Domain・Domain Path | TextDomain・DomainPath |
| Requires at least・Requires PHP | RequiresWP・RequiresPHP |
| Update URI | UpdateURI |
| Requires Plugins | RequiresPlugins |
| Network | Network(true か false) |
使い方の例
作業環境(WordPress 7.1.3)で試した結果を、コメントに書いています。例では、次の見出しのプラグインを読んでいます。
<?php /** * Plugin Name: My Sample * Description: Sample header for get_plugin_data test. * Version: 1.0.2 * Requires at least: 6.0 * Requires PHP: 7.4 * Author: Example * Update URI: https://example.local/my-sample * Text Domain: my-sample */
見出しを読む
<?php
// 管理画面の外(フロント・WP-Cron・REST API など)では、先に読み込む
if ( ! function_exists( 'get_plugin_data' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$data = get_plugin_data( WP_PLUGIN_DIR . '/my-sample/my-sample.php', false, false );
echo $data['Name']; // My Sample
echo $data['Version']; // 1.0.2
echo $data['RequiresWP']; // 6.0(Requires at least)
echo $data['RequiresPHP']; // 7.4(Requires PHP)
echo $data['UpdateURI']; // https://example.local/my-sample(Update URI)
echo $data['TextDomain']; // my-sample
echo $data['PluginURI']; // (書いていない見出しは空の文字列)
自分のプラグインのバージョンを見出しから読む
CSS や JavaScript のファイルを読み込むときのバージョンに、見出しの Version をそのまま使う例です。ファイルを読むので、static に置いて、1 回のページの表示で何度も読まないようにしています。
<?php
// 自分のプラグインのバージョンを、見出しから読む(定数を 2 か所に書かずにすむ)
function my_plugin_version() {
static $version = null;
if ( null === $version ) {
if ( ! function_exists( 'get_plugin_data' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$data = get_plugin_data( __FILE__, false, false );
$version = $data['Version'];
}
return $version;
}
wp_enqueue_style( 'my-sample', plugins_url( 'style.css', __FILE__ ), array(), my_plugin_version() );
Update URI で、WordPress.org のプラグインかを見分ける
Update URI は WordPress 5.8 から使える見出しで、wordpress.org・w.org 以外を指していると、WordPress.org からの更新を受け取りません。自作のプラグインを、WordPress.org のチェックサムと比べる対象から外すときなどに使えます。
<?php
// Update URI が WordPress.org 以外を指しているか(WordPress.org の更新を受け取らないプラグインか)
function my_is_not_org_plugin( $plugin_file ) {
$data = get_plugin_data( $plugin_file, false, false );
$uri = trim( $data['UpdateURI'] );
if ( '' === $uri ) {
return false; // 書いていない:WordPress.org のプラグインとして扱う
}
$host = strtolower( (string) wp_parse_url( $uri, PHP_URL_HOST ) );
return ! in_array( $host, array( 'wordpress.org', 'w.org' ), true );
}
var_dump( my_is_not_org_plugin( WP_PLUGIN_DIR . '/my-sample/my-sample.php' ) ); // bool(true)
var_dump( my_is_not_org_plugin( WP_PLUGIN_DIR . '/my-org-plugin/my-org-plugin.php' ) ); // bool(false)(Update URI を書いていない WordPress.org のプラグイン)
全部のプラグインを読むときは get_plugins()
get_plugins() は、プラグインのフォルダを探して、インストールしているプラグインの見出しをまとめて返します。中では 1 つずつ get_plugin_data() を呼んでいて、結果はキャッシュされます。
<?php // インストールしているプラグインを全部読むときは get_plugins() $all = get_plugins(); // キーは「フォルダ/メインのファイル.php」 echo count( $all ); // インストールしているプラグインの数 echo $all['my-org-plugin/my-org-plugin.php']['Version']; // 1.7.0(そのプラグインのバージョン) echo isset( $all['my-org-plugin/my-org-plugin.php'] ) ? 'yes' : ''; // yes
| 関数 | 使い分け |
|---|---|
| get_plugin_data() | ファイルを 1 つ決めて読む。プラグインのフォルダの外のファイルも読める |
| get_plugins() | インストールしているプラグインを全部読む。キーは「フォルダ/メインのファイル.php」 |
気をつけること
get_plugin_data()とget_plugins()は wp-admin/includes/plugin.php にあり、管理画面の外(フロント・WP-Cron・REST API)では読み込まれていないことがあります。作業環境では、ほかのプラグインが先に読み込んでいて使えましたが、それに頼らず、function_exists()で確かめてからrequire_onceしてください。- 見出しはファイルの頭の 8KB だけを読みます。見出しのコメントは、ファイルのいちばん上に書きます。
- ファイルがないときも、エラーで止まらず、値が空の配列が返ります(PHP の警告は出ます)。作業環境でも、ないファイルを渡すと Name・Version が空の文字列でした。
- $markup と $translate を true のまま(何も渡さない)にすると、翻訳の読み込みが早すぎるという通知が出ることがあります。値だけを使うときは、false, false を渡してください。


