マイ・プラグインを最初に読み込むようにする

前回「マイ・プラグインを最後に読み込むようにする」を作りましたが、これは 他プラグイン用の「アクションフィルター」や「アクションフック」を動作させるために最後に読み込むようにしていました。

しかし、他のプラグイン内部の 定数 等をプラグインに直書きせずに「my-plugin」等で 変更したい場合ではそのプラグインより 先に 読み込むようにしなければなりません。

「不動産プラグインシリーズ」では 定数や仕様の切替を「define()」で設定しています。
例えば、不動産プラグイン(本体)では 物件画像数(最大数)を以下のように記述しています。

//物件画像数
if ( !defined( 'FUDOU_IMG_MAX' ) ){
	define( 'FUDOU_IMG_MAX', 30 );
}

if ( !defined( ‘FUDOU_IMG_MAX’ ) ) のところがミソです。これは定数「FUDOU_IMG_MAX」が無ければ設定するという意味です。
不動産プラグイン(本体)より 先に読み込んだプラグイン(下記 my-first-plugin)で 「define( ‘FUDOU_IMG_MAX’, 50 );」と設定していれば、不動産プラグインにある「define( ‘FUDOU_IMG_MAX’, 30 );」は読み飛ばされます。
※ if ( !defined( ‘XXXX~ が ついてない場合は設定できません。

ということで、このように定数等を先に設定する事で プラグイン自体を変更する事なくバージョンアップも気軽にできるようになります。

 

my-first-plugin を最初に読み込むようにする

すでに「my-plugin」は最後に読み込むようにして使っていますので ここでは「my-first-plugin」というプラグインを新しく作ります。

WordPress (自分専用)マイ・プラグインを作ろう を参考に 「my-first-plugin」を作ってください。

「my-first-plugin」フォルダを作り、「my-first-plugin.php」ファイルをその中に設置して、以下のコードを入れてください。

<?php
/*
Plugin Name: my-first-plugin
Plugin URI:
Description: My First load plugin for WordPress
Version: 1.0.0
Author: 
Author URI:
License: GPLv2 or later
*/

// ここからオリジナルの コードをいれてください。







// ここまで

if ( ! function_exists( 'nendebcom_plugin_first_load' ) ) :
/*
 * my-first-plugin を最初に読み込むようにする。
 *
*/
function nendebcom_plugin_first_load() {

	$this_activeplugin	= '';
	$this_plugin		= 'my-first-plugin/my-first-plugin.php';	//最初に読み込みたいプラグイン
	$active_plugins		= get_option( 'active_plugins' );
	$new_active_plugins	= array();

	$new_active_plugins[] = $this_plugin;

	foreach ( $active_plugins as $plugins ) {
		if( $plugins != $this_plugin ){
			$new_active_plugins[] = $plugins;
		}
	}

	update_option( 'active_plugins', $new_active_plugins );
}
add_action( 'activated_plugin', 'nendebcom_plugin_first_load' );
endif; // nendebcom_plugin_first_load

※フォルダ名やファイル名を変更した場合は「$this_plugin」のところを変更してください。

 
 

ダウンロード

作るのが面倒な方は、zipセットを作りましたのでこちらからどうぞ。

※パスワード「nendeb」

 
 

プラグインの読み込み順を表示 【参考・確認用】

<?php
$active_plugins = get_option( 'active_plugins' );
var_dump( $active_plugins );
?>

※home.phpやindex.php の 「get_header(); ?>」の下あたりに置いてみてください。

適応前

適応後 (コードを my-first-plugin.php に設置してプラグインを停止→有効化する)

これで my-first-plugin が一番上になりました。

 
 

参考

activated_plugin | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/activated_plugin/