この記事は最後に更新してから1年以上経過しています。

不要なプラグインを読み込まない

説明

稼働中のサーバーにてバックグラウンドで何か処理しようとコマンドラインのプログラムを作る際、効率化や誤動作のリスクを考えると不要なプラグインはロードしないようにしたい。そんなわけで設定内容(データベース)は変更せず、特定のプラグインをロードしないようにできないか考えてみた。

wp-config.phpよりもwp-load.php

WordPressのデータにアクセスするコマンドライン向けのプログラムを作る際、諸設定などは最低限にしたい。そこで今回は(おそらく)一番シンプルであろうwp-load.phpを読み込むことにした。プログラム(以降、mytool.php)をWordPressがインストールされたディレクトリに配置するなら、冒頭部分は次のようになる。

<?php
require_once __DIR__ . '/wp-load.php';

// 以降に処理内容を記述.

データベースの設定情報が記述されているwp-config.phpでもよさそうだが、その場合は別途ABSPATHを定義しておく必要がある。またここでwp-load.phpを読み込むなら、wp-config.phpがWordPressがインストールされたディレクトリだけでなく、直上に配置されている場合にも対応できる。

ロードするプラグインの制御

WordPressのプラグインはWebリクエスト・レスポンスに関連するものがあり、コマンドラインのプログラムではそのようなプラグインは不要なケースがある。サイトを公開しつつ、そのバックグラウンドでプログラムを動かす場合はプラグインの設定を変更しづらく、プログラム側の実行時のみ任意のプラグインをロードしない方法を考えた。

標準的な(シングル)サイトの場合、wp-content/pluginsディレクトリのアクティブなプラグインをロードする前に「MU(must-use)プラグイン」をロードする仕組みになっている。MUプラグインは、WPMU_PLUGIN_DIRで定義されたディレクトリに配置されたプラグイン(PHPファイル)であり、一部のキャッシュプラグインなどがこの仕組みを利用している。このMUプラグインを利用すれば、通常のプラグインのロードを制御できそうだ。

次はアクティブなプラグインを取得になる。プライベート関数のwp_get_active_and_valid_plugins関数によると、アクティブなプラグインは get_option関数で取得している。

$active_plugins = (array) get_option( 'active_plugins', array() );

取得できる内容はwp-content/pluginsディレクトリの相対パス名の配列となっており、プラグインディレクトリ内のmycacheディレクトリのindex.phpであれば、"mycache/index.php"が格納されている。

array(2) {
  [0]=>
  string(19) "akismet/akismet.php"
  [1]=>
  string(17) "mycache/index.php"
}

get_option関数には取得した内容を返す前に実行するフィルターが用意されており、このフィルターを使用することでロードするアクティブなプラグインを制御できる。'mycache/index.php'をロードしないようにするなら、プラグイン(以降、mytool_plugin.php)は次のような感じになった。

<?php
function temporarily_disable_active_plugins( $value, $option ) {
	$key = array_search( 'mycache/index.php', (array)$value );
	if ( false !== $key ) {
		unset( $value[$ey] );
	}
	return $value;
}
add_filter( 'option_active_plugins', 'temporarily_disable_active_plugins', 10, 2 );

プラグインを作った経験がある方はオヤっと思われる方がいるかもしれないが、MUプラグイン向けプラグインは、一般的なプラグインと異なりコメントでプラグイン情報を記載する必要ない。

mytool_plugin.phpをMUプラグインとして読み込むため、mytool.phpにWPMU_PLUGIN_DIRの定義を追加する。ここではMUプラグインのディレクトリを直下の'mymu_plugins'とした。

<?php
define( 'WPMU_PLUGIN_DIR', __DIR__ . '/mymu_plugins' );
require_once __DIR__ . '/wp-load.php';

// 以降に処理内容を記述.

ここでの注意点は、そのサイトですでにMUプラグインを使用しているケース。その場合はdefined関数を使ってエラーにならないようにしておく。


今回、稼働中のサイトのバックグラウンドでタームのメンテナンスすることを考えその準備を進めた。このようにすることで、直接データベースを更新するのではなく、WordPress標準の関数が使用できるのはうれしい限りだ。


最終更新 : 2023年06月02日 16:59


お勧め

home_url(2023年3月31日 更新)

string home_url( [ string $path = '' [ , string $scheme = null ] ] )
現在のブログ(サイト)のホームURLを取得する。ホームURLは、管理者ページの「設定」-「一般」の「サイトのアドレス(URL)」のこと。

get_comment_meta(2014年3月9日 更新)

mixed get_comment_meta( int $comment_id [ , string $key = '' [ , bool $single = false ] ] )
コメントメタ情報の値を取得する。

wp_maybe_inline_styles(2025年12月4日 更新)

void wp_maybe_inline_styles()
CSSファイルの追加情報をインライン化する。

next_posts_link(2018年5月27日 更新)

void next_posts_link( [ string $label = 'Next Page &raquo;' [ , int $max_page = 0 ] ] )
カテゴリーやタグなどのアーカイブページにおいて、1ページの投稿件数以上の投稿があった場合に次ページへのリンクを表示する。

wp_lazy_loading_enabled(2023年8月11日 更新)

bool wp_lazy_loading_enabled( string $tag_name, string $context )
要素にloading属性を追加するか判定する。