XPressME Integration Kit

ブログ

WPの自動アップグレードについて調べてみる

XPressMEの自動アップグレード実現したく、まずは、WPの自動アップグレードがどのように行われているのか確認して見ました。

WPで自動アップグレードを行うと
wp-admin/update-core.phpが呼ばれdo_core_upgrade()が実行されます。

do_core_upgrade() では

  • find_core_update( $version, $locale ) [wp-admin/includes/update.php]

にてアップデートが存在するか確認

  • WP_Filesystem() [wp-admin/includes/file.php]を実行

get_filesystem_method()にてファイル操作が可能なメソッドを取得し、メソッドに応じ

class WP_Filesystem_ftpsockets
class WP_Filesystem_FTPext
class WP_Filesystem_Direct
class WP_Filesystem_SSH2

のいずれかのクラスよりglobal $wp_filesystem のインスタンスを作成する

  • wp_update_core($update, ‘show_message’);

$upgrader = new Core_Upgrader(); class Core_Upgraderより$upgradeのインスタンスを作成しreturn $upgrader->upgrade($current); メソッドupgrade($current)を実行

の作業を行います。

upgrade($current) {[wp-admin/includes/class-wp-upgrader.php] メソッドは

  • fs_connect(); global $wp_filesystem クラスのファイル制御と接続
  • download_package($package); アップデート用のファイルを作業エリアにダウンロード$packageにはzipのURLが入る。
  • unpack_package( $download ) $downloadにはdownload_packageで取得したファイルパスが入る。成功すればアンパックフォルダーパスを返す。
  • $wp_filesystem->copy()を実行 wp-admin/includes/class-wp-filesystem-**のどれかで実行
  • $wp_filesystem->chmod()を実行 ここでは上書きされた/wp-admin/includes/update-core.php をchmod 420 している
  • require(ABSPATH . ‘wp-admin/includes/update-core.php’); でupdate-core.phpをインクルード
  • update_core($working_dir, $wp_dir){;[/wp-admin/includes/update-core.ph]を実行

の作業を行い、更に、
update_core($working_dir, $wp_dir)[/wp-admin/includes/update-core.ph]にて

  • 作業に先立ち.maintenanceを作る

WPは .maintenanceファイルがあるとサイトアクセス時に「予定に基づいたメンテナンスを行っているためしばらくの間ご利用できません。少し間をおいて再度確認してください。」の表示を行う

  • copy_dir($from . $distro, $to);
  • 古い不要ファイルの削除
  • wp_remote_post($db_upgrade_url, array(‘timeout’ => 60)); リモートでデータベースのアップグレード
  • $wp_filesystem->delete($from, true); 作業ファイルの削除
  • $wp_filesystem->delete($maintenance_file);.maintenanceの削除

の作業を行うという手順で自動アップグレードが行われています。

コメント / トラックバック 1 件

コメントをどうぞ