ようへいの日々精進XP

よかろうもん

WordPress 及び WordPress プラグインやテーマの自動更新について調べた

自動更新のデフォルト設定

WordPress 5.6 から、以下のような変更が加えられていました。

make.wordpress.org

make.wordpress.org

管理画面に WordPress コアバージョンのメジャーバージョン自動更新をオプトインできるようにする為の新しい UI が導入されました。尚、デフォルトでは、メジャーバージョンの自動更新がオプトインされています (放っておくと、勝手にメジャーバージョンがあがる。。。 :cold_sweat: )

f:id:inokara:20210102141807p:plain

そして、実は、WordPress 5.5 からは、上記と同様に、プラグインやテーマの自動更新をオプトイン出来るようにする UI が導入されていました。

f:id:inokara:20210102141820p:plain

プラグインやテーマの自動更新については、デフォルトでは無効になっていて、管理者が手動で有効にしてあげる必要があるようです。

自動更新は...ちょっと...

WordPress コアバージョン (メジャーバージョンは流石に怖い) もプラグインやテーマも自動更新してくれるのは、運用上、非常に有り難いので有効にしておきたいところですが、事前の動作確認無しのアップデートは流石に怖いですよね。。。

ということで、WordPress コアのメジャーバージョンやマイナーバージョンの自動更新や、プラグイン、テーマの自動更新について無効にする設定につい確認しました。

自動更新無効にする方法

wp-config.php に設定するパターン

要件に応じて、以下の何れかを wp-config.php に追記します。

// This site will not receive automatic updates for new versions of WordPress.
define( 'AUTOMATIC_UPDATER_DISABLED', true ); // -> WordPress 本体バージョンの自動アップデート及び、プラグインとテーマの自動アップデートを無効

// This site will not receive automatic updates for new versions of WordPress.
define( 'WP_AUTO_UPDATE_CORE', false ); // -> WordPress 本体バージョンの自動アップデートの無効

// This site is automatically kept up to date with maintenance and security releases of WordPress only.
define( 'WP_AUTO_UPDATE_CORE', minor ); // -> WordPress 本体バージョンのマイナーバージョンアップを有効

// This site is automatically kept up to date with each new version of WordPress.
define( 'WP_AUTO_UPDATE_CORE', true ); // -> WordPress 本体バージョンの自動アップデートが有効になる
define( 'WP_AUTO_UPDATE_CORE', beta ); // -> WordPress 本体バージョンの自動アップデートが有効になる
define( 'WP_AUTO_UPDATE_CORE', rc ); // -> WordPress 本体バージョンの自動アップデートが有効になる

wp-includes/functions.php に設定するするパターン

要件に応じて、以下の何れかを wp-includes/functions.php に追記します。

// Disable major version auto-update
// This site is automatically kept up to date with maintenance and security releases of WordPress only.
add_filter( 'allow_major_auto_core_updates', '__return_false' ); // -> メジャーバージョンの自動アップデートを無効

// Disable plugins auto-update UI elements.
add_filter( 'plugins_auto_update_enabled', '__return_false' ); // -> プラグインの自動アップデートを無効
 
// Disable themes auto-update UI elements.
add_filter( 'themes_auto_update_enabled', '__return_false' ); // -> テーマの自動アップデートを無効

で、どうするか

以下のようなシェルスクリプトを用意してコンテナイメージをビルドする際に、wp-config.php を更新するようにしました。

#!/bin/bash

cp -v /usr/src/wordpress/wp-config-sample.php /usr/src/wordpress/wp-config-sample.php.1
awk '
  /^\/\*.*stop editing.*/ && c == 0 {
    c = 1
    print "/* Disable Auto Update */"
    print "define( \047AUTOMATIC_UPDATER_DISABLED\047, true );"
    print ""
  }
  { print }
' /usr/src/wordpress/wp-config-sample.php.1 > /usr/src/wordpress/wp-config-sample.php
if [ "$?" == "0" ];then
  rm -f /usr/src/wordpress/wp-config-sample.php.1
fi

尚、WordPress オフィシャルの Docker イメージを利用している場合、このシェルスクリプトを up-date-wp-config.sh というファイル名で追加して、Dockerfile には以下のように追加しました。

()
ADD bin/update-wp-config.sh /usr/local/bin/update-wp-config.sh
RUN /usr/local/bin/update-wp-config.sh
()

コンテナを起動すると、wp-config.php は以下のような状態となります。

/* Disable Auto Update */
define( 'AUTOMATIC_UPDATER_DISABLED', true );

// If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
}

/* That's all, stop editing! Happy publishing. */

ちゃんと、define( 'AUTOMATIC_UPDATER_DISABLED', true ); が挿入されています。ちなみに、If we're behind a proxy server and using HTTPS から始まる行については、WordPress コンテナが起動する際に実行される docker-entrypoint.sh によって挿入されています。

以上

WordPress 三昧な冬休みになりそうです。

参考

make.wordpress.org

make.wordpress.org

hub.docker.com