Gutenbergのパッケージのバージョン取得ライブラリ

gutenberg WordPress
Gutenbergのパッケージのバージョン取得API
Gutenbergは下位互換性はあまり考慮されておらず、破壊的な変更が度々発生します。また、それぞれの環境で使用されているGutenbergや使用されているパッケージのバージョンを取得する方法がありません。下記の記事で書い...

こちらの記事で紹介したAPIをより簡単に利用するためのライブラリです。

technote-space/gutenberg-packages
Library to get versions of gutenberg packages. Contribute to technote-space/gutenberg-packages development by creating an account on GitHub.

処理

以下の順でデータの取得を試みます。

  1. ライブラリ内
  2. API
  3. リポジトリ

ライブラリ内

API更新用のリポジトリを require しています。

technote-space/gutenberg-package-versions
Versions of Gutenberg's packages (auto updated by Travis CI) - technote-space/gutenberg-package-versions

このリポジトリ自体にもデータを置いてあるのでそれを使用します。

technote-space/gutenberg-package-versions
Versions of Gutenberg's packages (auto updated by Travis CI) - technote-space/gutenberg-package-versions

外部へのリクエストを行わないので処理は速いです。

API

ライブラリ内のデータはダウンロードした時点のものなので、最新のものはありません。

その場合は毎日更新しているAPIに問い合わせます。

リポジトリ

デイリー更新のAPIでも情報がない場合は直接リポジトリから取得します。

ただしパッチバージョンは考慮されません。

キャッシュ

結果は1日キャッシュされます。

ただし、WordPressのバージョンやGutenbergプラグインの使用状態、Gutenbergプラグインのバージョンが変更された場合はキャッシュはクリアされます。

インストール

composer require technote/gutenberg-packages

使用方法

<?php
use Technote\GutenbergPackages;

$packages = new GutenbergPackages();

// ブロックエディタかどうか
$packages->is_block_editor(); // true or false

// Gutenbergプラグインのバージョン
// プラグインが無効の時は空
$packages->get_gutenberg_version(); // e.g. 6.0.0

// パッケージのバージョン取得
// ブロックエディタが無効の時は false
$packages->get_editor_package_versions(); // array of (package => version)
/** e.g.
[
  "wp-a11y"        => "2.0.2",
  "wp-annotations" => "1.0.8",
  "wp-api-fetch"   => "2.2.8",

  ...

  "wp-url"         => "2.3.3",
  "wp-viewport"    => "2.1.1",
  "wp-wordcount"   => "2.0.3"
]
*/

// パッケージのバージョン個別取得
$packages->get_editor_package_version( 'wp-editor' ); // e.g. 9.0.11
$packages->get_editor_package_version( 'editor' ); // same as above

// パッケージが有効かどうか
$packages->is_support_editor_package( 'wp-editor' ); // true or false
$packages->is_support_editor_package( 'editor' ); // same as above

// パッケージをフィルタ
$packages->filter_packages( [
	'editor',
	'wp-editor',
	'test-package',
	'components',
	'wp-data',
	'wp-data',
] );
/** e.g.
[
	'wp-editor',
	'wp-components',
	'wp-data',
]
*/

// パッケージをフィルタしてバージョンを付与
$packages->fill_package_versions( [
	'editor',
	'wp-editor',
	'test-package',
	'components',
	'wp-data',
	'wp-data',
] );
/** e.g.
[
	'wp-editor'     => '9.0.11',
	'wp-components' => '7.0.8',
	'wp-data'       => '4.2.1',
]
*/

パッケージをフィルタすることで wp_enqueue_script の $deps に無効なパッケージが渡りません。

<?php
use Technote\GutenbergPackages;

$packages = new GutenbergPackages();
wp_enqueue_script( 'test-script', 'path/to/javascript/index.js', $packages->filter_packages( [
	'wp-block-editor',
	'wp-components',
	'wp-compose',
	'wp-element',
	'wp-editor',
], [ 'lodash' ] ) );

fill_package_versions で取得した値を wp_localize_script に渡すことで、JavaScript側でバージョン情報を使用することができます。

<?php
use Technote\GutenbergPackages;

$packages = new GutenbergPackages();

$depends = [
	'wp-block-editor',
	'wp-components',
	'wp-compose',
	'wp-data',
	'wp-element',
	'wp-editor',
];
wp_enqueue_script( 'test-script', 'path/to/javascript/index.js', $packages->filter_packages( $depends, [ 'lodash' ] ) );
wp_localize_script( 'test-script', 'PackageVersions', $packages->fill_package_versions( $depends) );
// JavaScript
console.log( PackageVersions );

コメント

タイトルとURLをコピーしました