1 of 12

プラグインアップデートの仕組み

2 of 12

自己紹介(追加)

  • 以前は岡山の制作会社勤務
  • 現在 岡山の個人事業主(妻 社労士)
  • Okayama WordPress Meetup 所属

3 of 12

プラグインのアップデートについて調べることになったきっかけ

  • 自動更新を無効にしていたにもかかわらず、プラグインがアップデートされるという現象が発生

  • 過去にも Ninja Forms Contact Form (2022年6月) や Loginizer (2020年10月)で強制アップデートが実施されたらしい

4 of 12

アップデートの概要

※参照: https://ja.wordpress.org/support/article/configuring-automatic-background-updates/

WordPressのアップデート処理

  • コアアップデート(WordPress本体)
  • テーマアップデート
  • プラグインアップデート
  • 翻訳アップデート

5 of 12

バージョンチェックと処理の流れ(ページアクセスと wp_cron 実行)

※参照: https://developer.wordpress.org/plugins/cron/

WordPress のページアクセスは以下の流れで処理されます。

  1. index.php(ページアクセス)
  2. wp-blog-header.php
  3. wp-load.php
  4. wp-config.php
  5. wp-settings.php
  6. wp-includes/default-filters.php
  7. wp-cron.php (wp-includes/cron.php を含む)
  8. wp_cron 実行

上記の流れの中で、wp-cron.php が wp_cron を実行します。

6 of 12

プログラムでの処理の流れ

1. 情報取得

1.1. API参照

wp_version_check() 関数は、WordPress.org の API を参照し、

https://codex.wordpress.org/WordPress.org_API

プラグインの最新バージョンや更新状況などの情報を取得します。

1.2. データ保持

取得したデータは、transient と呼ばれる WordPress 内部キャッシュに保存されます。

これは、wp_options テーブルの _site_transient_update_plugins に保存されます。

1.3. 更新頻度

  • 情報取得: 12時間ごと
  • 情報参照: 12時間以内であれば transient を参照

1.4. 情報更新の遅延

12時間以内にプラグインが更新された場合、次の情報取得まで反映されない可能性があります。

7 of 12

プログラムでの処理の流れ2

2. 自動更新処理

2.1. 自動更新設定

プラグインの自動更新が有効の場合、12時間ごとの wp_cron で実際の更新処理が動作します。

2.2. 更新処理

更新対象となるプラグインに対して、以下の処理が実行されます。

  • プラグインファイルのダウンロード
  • プラグインファイルの解凍
  • プラグインファイルのインストール
  • プラグインの有効化

3.強制アップデートについて

8 of 12

正しい?プラグインアップデートの制御

定数を指定して無効化

AUTOMATIC_UPDATER_DISABLED 定数

 wp-config.php ファイルに AUTOMATIC_UPDATER_DISABLED 定数を true に設定することで、全ての自動更新を無効化できます

注意事項

  • 定数を設定しても、すでにダウンロード済みの更新ファイルは自動的にインストールされます。

define( 'AUTOMATIC_UPDATER_DISABLED', true );

9 of 12

フックを使用した無効化

auto_update フック

 auto_update フックは、全ての自動更新を制御するフックです。

 このフックに false を返すことで、全ての自動更新を無効化できます。

auto_update_{$type} フック

 auto_update_{$type} フックは、特定の種類の自動更新を制御するフックです。

 {$type} には、core、plugin、theme、translation のいずれかを指定できます。

注意事項

  • フックよりも定数の方が優先されます。

add_filter( 'auto_update', function( $update ) {

return false;

} );

add_filter( 'auto_update_plugin', function( $update ) {

// 特定のプラグインのみ更新を停止する

if ( $plugin['slug'] === 'my-plugin' ) {

return false;

}

return $update;

} );

10 of 12

プラグインのアップデート制御:UpdateURI の活用

  • 浜野さんのqiitaの記事:https://qiita.com/AkiHamano/items/d35b7f876b1d1519e1e8
  • 更新先の変更( UpdateURI の指定)WordPress 5.8より
  • プラグイン情報に独自の情報源を指定するための機能
  • 既存の公開プラグインとスラッグが同じプラグインでも、上書きされない
  • 専用のフックを使用して独自のファイルをダウンロード出来る
  • 公式プラグインを独自に更新が出来る
  • オリジナルプラグインの更新の仕組みが提供できる

11 of 12

WordPress 6.5 の新機能:プラグインの依存関係制御

  • 参照:https://make.wordpress.org/core/2022/02/24/feature-project-plugin-dependencies/
  • プラグインの依存関係の設定(Requires Pluginsの指定) WordPress 6.5より
  • Requires Pluginsという情報をプラグインに記述することによりプラグインの依存性が制御されます。
  • ただし、プラグインのバージョンまでは管理しないようです。
  • 依存関係の記述があると、対象のプラグインは無効化が出来なくなります。
  • 新規インストールの際も対象のプラグインをインストールしないとインストール出来なくなります。

12 of 12

以上