get_plugin_data():プラグインの見出しの情報を読む(WordPress)

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)で試した結果を、コメントに書いています。例では、次の見出しのプラグインを読んでいます。

my-sample.php
<?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 を渡してください。

逆引きリファレンスの一覧へ

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP