前回「マイ・プラグインを最後に読み込むようにする」を作りましたが、これは 他プラグイン用の「アクションフィルター」や「アクションフック」を動作させるために最後に読み込むようにしていました。
しかし、他のプラグイン内部の 定数 等をプラグインに直書きせずに「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/