2026年5月20日

2026年5月20日

WordPressで特定プラグインだけ自動更新を無効にする方法(管理画面・auto_update_pluginフィルター・WP-CLI)

WordPress 5.5 からプラグインごとに自動更新を有効・無効にできるようになりました。WooCommerce のように更新前に動作を確かめたいプラグインや、手を加えたプラグインだけ自動更新を止め、ほかは自動更新に任せる、という使い分けができます。

この記事では、次の3つの方法を説明します。手順とコードは 2026年11月時点の WordPress 7.1(日本語版)と WP-CLI 2.12 で動作を確かめています。

方法 向いている場面
管理画面で切り替える 数本のプラグインを手で切り替えるとき
auto_update_plugin フィルター 管理画面から変えられないように固定したいとき、複数サイトで同じ設定にしたいとき
WP-CLI サーバー上でまとめて切り替えたいとき、作業手順をスクリプトにしたいとき

管理画面で特定プラグインの自動更新を切り替える

  1. 管理画面の「プラグイン」→「インストール済みプラグイン」を開きます。
  2. 一覧の「自動更新」列に、プラグインごとに「自動更新を有効化」または「自動更新を無効化」のリンクがあります。止めたいプラグインの「自動更新を無効化」をクリックします。

複数のプラグインをまとめて切り替えるときは、対象のチェックボックスを選び、「一括操作」から「自動更新を有効化」または「自動更新を無効化」を選んで「適用」を押します。

この設定はデータベースの auto_update_plugins オプションに、自動更新を有効にしたプラグインの一覧として保存されます。新しく入れたプラグインは、自動更新が無効の状態から始まります。

auto_update_plugin フィルターで特定プラグインの自動更新を止める

管理画面の設定は、管理者なら誰でも切り替えられます。特定のプラグインの自動更新を止めたまま固定したい場合は、auto_update_plugin フィルターを使います。

コードを置く場所

テーマの functions.php に書くと、テーマを変えたときに設定が消えます。wp-content/mu-plugins/ に1つのファイルとして置く方法(Must-Use プラグイン)をおすすめします。mu-plugins フォルダーが無ければ作ります。このフォルダーのPHPファイルは有効化の操作なしで読み込まれ、管理画面から停止できません。

wp-content/mu-plugins/disable-plugin-autoupdate.php として次の内容で保存します。

<?php
/**
 * Plugin Name: 特定プラグインの自動更新を止める
 * Description: 指定したプラグインだけ自動更新を無効にします。
 */

add_filter( 'auto_update_plugin', function ( $update, $item ) {
	// 自動更新を止めたいプラグイン(プラグインフォルダー/メインファイル)
	$disabled = array(
		'woocommerce/woocommerce.php',
		'elementor/elementor.php',
	);

	if ( isset( $item->plugin ) && in_array( $item->plugin, $disabled, true ) ) {
		return false;
	}

	// それ以外は管理画面の設定どおり($update は null のこともある)
	return $update;
}, 10, 2 );

$item->plugin には、woocommerce/woocommerce.php のような「プラグインフォルダー名/メインファイル名」が入ります。インストール済みのプラグインの値は、WP-CLI の次のコマンドで確認できます。

wp plugin list --fields=name,file,auto_update

引数に型を付けない理由

このフィルターの第1引数 $update は、true/false だけでなく null で呼ばれることがあります。WordPress はプラグイン一覧の画面を表示するとき、フィルターが値を強制しているかどうかを調べるために null を渡して auto_update_plugin を呼び、戻り値が null 以外なら「強制されている」と判断します。

そのため、次のように引数を bool 型にすると、プラグイン一覧を開いたときに TypeError(must be of type bool, null given)で致命的エラーになります。

// 誤り: $update に null が渡されると TypeError になる
add_filter( 'auto_update_plugin', function ( bool $update, object $item ): bool {
	return $update;
}, 10, 2 );

対象外のプラグインでは、受け取った $update をそのまま返してください。true や false を返すと、すべてのプラグインが「強制された設定」になり、管理画面から切り替えられなくなります。

管理画面での見え方

フィルターで false を返したプラグインは、「自動更新」列のリンクが消え、「自動更新無効」と表示されます。管理画面から有効に戻すことはできません。フィルターの対象から外したプラグインは、これまでどおり「自動更新を有効化」「自動更新を無効化」で切り替えられます。

WP-CLIで自動更新を切り替える

WP-CLI では wp plugin auto-updates コマンドで切り替えます。引数はプラグインのスラッグ(wp plugin list の name 列)です。

# すべてのプラグインの自動更新の状態を表示
wp plugin auto-updates status --all

# 特定プラグインの自動更新を無効にする
wp plugin auto-updates disable woocommerce elementor

# 特定プラグインの自動更新を有効にする
wp plugin auto-updates enable akismet

# すべてのプラグインの自動更新を無効にする/有効にする
wp plugin auto-updates disable --all
wp plugin auto-updates enable --all

# 保存されている設定(自動更新が有効なプラグインの一覧)を見る
wp option get auto_update_plugins --format=json

wp plugin auto-updates が変えるのは、管理画面と同じ auto_update_plugins オプションです。status が表示するのもこの保存値で、auto_update_plugin フィルターで強制した結果は反映されません。フィルターで止めたプラグインを enable しても enabled と表示されますが、実際の自動更新はフィルターの判定で止まります。

マルチサイトでは、この設定はネットワーク全体の設定(サイトオプション)として保存されます。値を直接見るときは wp site option get auto_update_plugins --format=json を使います。

すべての自動更新を止める方法との違い

特定のプラグインではなく、プラグイン全体の自動更新を止めたいときは、次のフィルターを使います。コアのマイナー更新(セキュリティ修正を含む)は止まりません。

<?php
// すべてのプラグインの自動更新を止める
add_filter( 'auto_update_plugin', '__return_false' );

// テーマの自動更新も止める場合
add_filter( 'auto_update_theme', '__return_false' );

一方、wp-config.php に次の定数を書くと、コア・プラグイン・テーマ・翻訳を含むすべての自動更新が止まります。

define( 'AUTOMATIC_UPDATER_DISABLED', true );

この定数を true にすると、allow_minor_auto_core_updates などのフィルターでコアのマイナー更新だけを残すことはできません(自動更新の仕組みそのものが無効になるため)。特定のプラグインだけ止めたい場合は、この定数を使わず、前の節のフィルターを使ってください。

自動更新のメール通知を調整する

プラグインの自動更新が終わると、サイトの管理者メールアドレスに結果のメールが届きます。通知を止める、宛先を変えるといった調整はフィルターでできます。

<?php
// プラグインの自動更新の結果メールを送らない
add_filter( 'auto_plugin_update_send_email', '__return_false' );

宛先を変えるときは、送信前のメールの内容(to、subject、body、headers)を受け取る auto_plugin_theme_update_email フィルターを使います。to には配列で複数の宛先を渡せます。

<?php
add_filter( 'auto_plugin_theme_update_email', function ( $email ) {
	$email['to'] = array( 'admin@example.com', 'dev@example.com' );
	return $email;
} );

自動更新がすべて終わったあとに処理を加えたい場合は、automatic_updates_complete アクションを使います。次の例は、更新されたプラグインの名前をPHPのエラーログに書き出します。

<?php
add_action( 'automatic_updates_complete', function ( $results ) {
	if ( empty( $results['plugin'] ) ) {
		return;
	}
	$names = array();
	foreach ( $results['plugin'] as $result ) {
		$names[] = $result->name;
	}
	error_log( 'プラグインの自動更新: ' . implode( ', ', $names ) );
} );

自動更新を止めたプラグインを手動で更新する

自動更新を止めたプラグインは、更新が出ていないか定期的に確認し、バックアップを取ってから手動で更新します。セキュリティ修正を含む更新が出たまま放置しないようにしてください。

# 更新のあるプラグインを確認(実際には更新しない)
wp plugin update --all --dry-run

# 特定のプラグインだけ更新する
wp plugin update woocommerce

管理画面からは「ダッシュボード」→「更新」、または「プラグイン」→「インストール済みプラグイン」の「今すぐ更新」から更新できます。

関連記事

お気軽にご相談ください

お見積りへ お問い合わせへ
▲