自作のプラグインを自分のサイトから配って、管理画面から更新できるようにする:Update URI の使い方

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

このブログで配っている自作のプラグインは WordPress.org に載せていないので、新しいバージョンを出すたびに、入れたサイトを 1 つずつ手で更新することになります。WordPress 5.8 からは、プラグインのヘッダーに Update URI を書くと、自分のサーバーから更新を配れる仕組みが用意されています。そのプラグインで実際に作った形を紹介します。

できるようになること

  • 新しいバージョンを出すと、入れたサイトの「プラグイン」の画面に更新のお知らせが出る
  • ほかのプラグインと同じく、ボタン 1 つで更新できる
  • 「詳細を表示」に、説明や変更の履歴を出せる

1. プラグインのヘッダーに Update URI を書く

/**
 * Plugin Name: My Plugin
 * Version: 1.3.0
 * Update URI: https://example.com/downloads/my-plugin/
 */

Update URI のホスト名(ここでは example.com)が大事です。WordPress は、WordPress.org 以外のホスト名が書かれたプラグインについて、「update_plugins_{ホスト名}」というフィルターを呼んで、更新があるかを聞いてきます。

2. フィルターで、新しいバージョンの情報を返す

add_filter( 'update_plugins_example.com', function ( $update, $plugin_data, $plugin_file ) {
	if ( 'my-plugin/my-plugin.php' !== $plugin_file ) {
		return $update;
	}
	$res = wp_remote_get( 'https://example.com/downloads/my-plugin/info.json', array( 'timeout' => 5 ) );
	if ( is_wp_error( $res ) || 200 !== wp_remote_retrieve_response_code( $res ) ) {
		return $update;
	}
	$info = json_decode( wp_remote_retrieve_body( $res ), true );
	if ( empty( $info['version'] ) || empty( $info['download_url'] ) ) {
		return $update;
	}
	return array(
		'slug'    => 'my-plugin',
		'version' => $info['version'],
		'package' => $info['download_url'],
		'url'     => 'https://example.com/downloads/my-plugin/',
	);
}, 10, 3 );

バージョンの比べ合わせは WordPress がしてくれるので、ここでは今のバージョンの情報を返すだけです。実際には、毎回取りに行かないよう transient で 12 時間ほど覚えておき、取れなかったときは 1 時間後にやり直すようにしています。

3. サーバーに更新の案内(JSON)と zip を置く

{
  "version": "1.3.0",
  "download_url": "https://example.com/downloads/my-plugin/my-plugin-1.3.0.zip",
  "requires": "6.0",
  "tested": "7.1",
  "requires_php": "7.4"
}

zip の中は「my-plugin/my-plugin.php」のように、プラグインのフォルダごと入れます。このブログでは、テーマの中にファイルを置いて決まった URL で出すようにしたので、新しいバージョンはテーマを更新するだけで配れます。

気をつけること

  • 更新の確認は、プラグインが有効のときだけ動く。無効のまま置いてあるサイトには、お知らせが出ない
  • zip の URL は https で、自分のホストのものだけを受け付けるようにしておく(案内のファイルを書き換えられても、ほかの場所の zip を入れさせない)
  • 覚えた案内は、「ダッシュボード → 更新」の「再確認」のときに捨てて読み直すようにすると、すぐに確認できる
  • 「詳細を表示」を出したいときは、plugins_api のフィルターで説明や変更の履歴を返す

SiteBeacon(サイトビーコン)

サイトが止まったら、すぐに気づける。

ホームページを 5 分ごとにチェックして、止まったとき・エラーが出たとき・SSL やドメインの期限が近いときに、メールでお知らせします。2 サイトまでは、ずっと無料で使えます。

SiteBeacon を見る サイトを直す相談をする

監視で気づいたあとの直す作業も、同じ担当がお受けします。