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