WordPressのコアファイル、テーマ、プラグインを定期的に更新することは、セキュリティ強化に欠かせません。しかし、更新作業は手間がかかります。プラグインを多数インストールしているサイトではなおさらです。更新作業は通常、以下の手順が推奨されています。
- ファイルとデータベーステーブルのバックアップを作成
- プラグインを無効化
- 更新
- プラグインを1つずつ有効化
- サイトの状態を確認
単一のサイトで実行するにも面倒なこの作業は、サイト数が5件、10件、あるいはそれ以上になると気が遠くなります。
WordPress 3.7以降、セキュリティ強化とサイト管理の簡素化を目的として自動更新機能が組み込まれています。デフォルトでは、マイナーリリース(メンテナンス、セキュリティ関連のリリースなど)と翻訳ファイルがサポートされていますが、あらゆる種類の更新に適用することも可能です。そこで今回はこの機能を掘り下げて、WordPressコア、テーマ、プラグインの新しいバージョンがリリースされた際に、更新が自動で行われるように設定する方法をご紹介します。

WordPressの自動更新とは
一口に「WordPressの更新」と言っても、その対象は以下の4種類あります。
- コアファイルの更新
- プラグインの更新
- テーマの更新
- 翻訳ファイルの更新
コアファイルの更新は、さらに以下3つに分類されます。
- コアファイル開発版の更新(開発版WordPressでのみ利用可能)
- コアファイルのマイナーアップデート(メンテナンスとセキュリティ)※デフォルトで有効
- コアファイルのメジャーアップデート
WordPressでは、2つのwp-config.php定数と様々なフィルターにより、上記すべてのタイプの更新を自動化することができます。
wp-config.phpで自動更新を管理する方法
WordPressには、自動更新を制御できる2つのwp-config.php定数が存在します。AUTOMATIC_UPDATER_DISABLED
の値を「true」に設定すると、全ての自動更新を無効化できます。
define( 'AUTOMATIC_UPDATER_DISABLED', true );
WP_AUTO_UPDATE_COREはコアファイルのアップデート(マイナー、メジャー、開発リリース)を制御可能です。この定数は次の通り定義できます。
# すべてのコアアップデートを無効化
define( 'WP_AUTO_UPDATE_CORE', false );
# マイナー、メジャーを含むすべてのコアアップデートを有効化
define( 'WP_AUTO_UPDATE_CORE', true );
# マイナーアップデートを有効化
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
開発版WordPressでは、WP_AUTO_UPDATE_CORE
の値はデフォルトでは「true」になっています。通常のWordPressではデフォルトで「minor」に設定されています。
全てを網羅するために、自動更新を無効化するもう一つの定数もご紹介します。ただし、この値を「true」に設定すると、テーマやプラグイン、手動更新を含め、全てのファイルの編集が無効化されてしまいます。
define( 'DISALLOW_FILE_MODS', true );
上記の代わりに、インストール、更新機能の安全性を維持しつつファイルエディターを無効化することができる、DISALLOW_FILE_EDITS
定数を定義することをおすすめします。
関連記事: wp-config.phpファイル─WordPressの構成方法を徹底解説
フィルターで自動更新を管理する方法
上記の通り、定数を使って自動更新全般の有効化、無効化を設定できますが、WordPressでは、フィルターを利用して全ての種類の更新のより細かな設定も行うことができます。
補足)フィルターはプラグイン内で利用すべきであり、自動更新は「必須プラグイン」に利用するのがお勧めです。必須プラグインは/wp-content内の特定のフォルダに入っており、自動で有効化されます。このプラグインはWordPressのプラグイン画面には表示されません。そのため、管理者が誤って無効化したり、削除したりしてしまう恐れがありません。詳しくは、Codexの公式ドキュメントをご覧ください。
まず、automatic_updater_disabledフィルターで「true」の値を設定するのには、wp-config.phpでAUTOMATIC_UPDATER_DISABLED
の値を「true」に設定するのと同じ効果があります。
add_filter( 'automatic_updater_disabled', '__return_true' );
auto_update_$type
フィルターでは、 $type
('core'
、'plugin'
、'theme'
または'translation'
)に設定する値に応じて更新を有効化、無効化できるため、あらゆる種類の更新を制御できます。
例えば、auto_update_core
フィルターで、「true」の値を設定することで、全てのコアファイルの更新を自動化することができます。
add_filter( 'auto_update_core', '__return_true' );
次の例では、テーマ、プラグイン、翻訳ファイルの自動更新を有効化しています。
add_filter( 'auto_update_theme', '__return_true' );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_translation', '__return_true' );
上記の例では、自動更新のみを有効化しましたが、このフィルターはより細かな更新の設定も可能です。次の例では、特定の2つのプラグインに対して自動更新を有効化しています。
function cb_auto_update_plugins ( $update, $item ) {
$plugins = array ( 'hello', 'akismet' );
if ( in_array( $item->slug, $plugins ) ) {
// プラグインを更新
return true;
} else {
// デフォルトの設定を使用
return $update;
}
}
add_filter( 'auto_update_plugin', 'cb_auto_update_plugins', 10, 2 );
コールバック関数には次の2つの引数があります。
$update
: 更新するか否かを設定するための真偽値$item
: 更新の対象
関数は更新の対象が$plugins
の配列内にあるかどうかを確認し、それに応じて「true」または「false」の値を返します。
最後に、次のフィルターでtrue
またはfalse
の値を設定し、開発アップデート、マイナーアップデート、メジャーアップデートの区別ができます。
add_filter( 'allow_dev_auto_core_updates', '__return_false' );
add_filter( 'allow_minor_auto_core_updates', '__return_true' );
add_filter( 'allow_major_auto_core_updates', '__return_true' );
更新は時に失敗することもあり、この失敗によってサイトがダウンすることもあります。WordPressでは、更新の完了(もしくは更新の試み)後に通知を受け取ることができます。
結果、通知、デバッグメールの受け取り
更新プロセスの結果に応じて、管理者のメールアドレスに異なるメールが配信されます。
- 結果メール:コアファイルの自動更新が完了すると配信
- 通知メール:自動更新が実行できなかった場合に配信
- デバッグメール:開発版WordPressで配信
自動更新が成功、または失敗すると、次のいずれかの通知メールがWordPressから配信されます。
- WordPress XXXへのサイト更新が完了しました。(自動更新が成功した場合)
- WordPress XXXが利用可能です。今すぐ更新してください。(自動更新が失敗し手動での更新が必要な場合)
- 緊急:更新の失敗によりサイトがダウンする可能性があります。(自動更新が失敗し、WordPressがダウンする可能性がある場合)
auto_core_update_send_email
フィルターは結果と通知のメールを制御できます。次のとおり、false
とすることで、これらのメールを無効化することができます。
apply_filters( 'auto_core_update_send_email', '__return_false' );
コアファイルのメジャーアップデート、または、テーマやプラグインまで自動更新を適用する場合などには、結果と通知のメールを受け取りたい方もいるはずです。更新の結果や種類によって配信の有無を調整したいケースも考えられます。次の例では、更新が成功した場合には結果メールが配信されないように設定しています。
function cb_auto_core_update_send_email ( $send, $type, $core_update, $result ) {
if ( !empty( $type ) && $type == 'success' ) {
// メールを送信しない
return false;
}
// デフォルトの設定を使用
return $send;
}
}
add_filter( 'auto_core_update_send_email', 'cb_auto_core_update_send_email', 10, 4 );
コールバック関数には次の引数が含まれます。
$send
結果メールまたは通知メールを配信するか否かを設定するための真偽値$type
配信したいメールの種類を設定するための文字列(成功、失敗、重大)$core_update
更新の対象$result
コアファイル更新の結果(WP_Errorなど)
デフォルトでは、WordPress.orgからリリースされた更新に何らかのフラグが設定され更新ができない場合、管理者へ通知が届きます。通知メールは一つのリリースにつき一度だけ配信されます。send_core_update_notification_email
フィルターでは、これらの通知を配信するか否か、またいつ配信するかを調整することができます。フィルターを次のように設定します。
apply_filters( 'send_core_update_notification_email', '__return_true' );
最後に、automatic_updates_send_debug_email
フィルターは実行された更新に関する有益な情報が記載されたデバッグメールの制御ができます。デフォルトでは、開発版WordPressのみで配信されます。「false」の値を設定すると、デバッグメールは配信されず、逆に「true」の値を設定すると、通常のWordPressでもメールが配信されます。
apply_filters( 'automatic_updates_send_debug_email', '__return_true' );
WordPressの自動更新を無効化すべき状況
自動更新は、時間や作業量を大幅に削減できるため非常に便利な機能ですが、その一方で、自動更新が安全な機能に思えても、すべてに適用するのかが適切かどうかは常に考慮する必要があります。
例えば、テーマやプラグインとの互換性の問題が起こり、機能の一部の停止や、場合によってはサイト自体の破損を引き起こすこともあります。サイトに多くのプラグインを使用している場合、少なくともプラグインに関しては、手動で更新を行った方が安全な場合もあります。それにより、自動更新では発見することが困難な問題を素早く検出できます。
また開発者は、配布する予定がない場合でも、テーマやプラグインの名前は慎重に決定してください。更新を実行する際、WordPressはプラグインディレクトリ内からプラグインの新しいバージョンを探し出し、同じ名前のものが見つかった場合にファイルを上書きします。そのため、テーマやプラグインの自動更新を検討している場合、他とは異なる一意の名前をつけるようにすることが重要です。
以上は主に開発者向けのアドバイスとなりますが、開発者以外のユーザーは、以下を参考に自動更新の管理を行ってみてください。
プラグインでWordPressの自動更新を管理する方法
プラグインでWordPressの自動更新を制御することもできます。
Easy Updates Managerを使用すると、はシングルサイトとマルチサイトの両方で、WordPressの更新を制御することができます。すべての種類の更新を管理でき、個別のテーマやプラグインの自動更新を設定することも可能です。また、通知メール、ユーザーのブロック、プラグイン更新の記録に関する追加機能もあります。

互換性が損なわれた場合、速やかにテーマとプラグインを以前のバージョンに戻す必要があります。WP Rollbackは、プラグイン画面にインストールされた全てのテーマとプラグインを以前のバージョンに復元することのできるプラグインです。「Rollback」をクリックすると、利用可能なバージョンが表示されます。
残念ながらサイトがダウンしてしまった場合、WP Rollbackでは対処できませんので、事前にバックアップを取っておき、ドキュメントによく目を通してください。

WordPressサイトの自動更新に関する互換性のテストを行うには、Background Update Testerプラグインがおすすめです。
有料プラグインとテーマの自動更新
有料のWordPressプラグインやテーマの開発者には、円滑な自動更新の仕組みを製品に組み込む義務があります。これは今や市場の標準となっており、それにはもちろん十分な理由があります。ご自分で更新のメカニズムを開発した上で公開してもいいですし、既存の安全なレポジトリと自動更新サービスが整ったFreemiusやKernlのようなプラットフォームを活用することもできます。Freemiusは安全なリポジトリと自動更新をデフォルトで提供しています。
自動更新をロールバックする方法
コア、プラグイン、テーマの更新は、自動・手動を問わずリスクを伴う作業です。WordPressには、更新により問題が発生した場合を考慮して、元に戻す機能が組み込まれています。WordPress 3.7からコア更新の自動ロールバックが導入されています。
WordPress 6.3以降は、プラグインを手動で更新した場合、PHPの致命的なエラーが発生すると、プラグインは再有効化されないようになりますが、プラグインの自動更新に対しては、WordPress 6.6までこの機能はありませんでした。
WordPressサイトでプラグインの自動更新を有効にしている場合は、障害が発生しても、自動的にプラグインが以前のバージョンにロールバックされるため、サイトがクラッシュするのを防ぐことができ、死の真っ白画面が表示されることはありません。WordPress管理画面のプラグインページを開くと、プラグインがまだ更新可能な状態になっていることがわかります。

また、プラグインの更新時にエラーが検出されると、更新に失敗したプラグインと最新のプラグインをリストアップしたメールがサイト管理者に送信されます。

ステージング環境で更新を再試行するか、問題が修正されたバージョンのリリースを待つか、または開発者に問い合わせてみてください。
まとめ
WordPressの自動更新は時間や作業量を大幅に削減でき、常にサイトを最新の状態に維持できる素晴らしい機能です。あなたは全ての種類の更新を有効にしていますか?コメント欄で是非お聞かせください。