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

前回、マイ・プラグイン を作りましたがこれから様々な フィルターフック や アクションフック を入れていく中で、プラグイン の読み込み順のせいで フィルターフック や アクションフック が効かない場合があります。
これは、WordPressの起動時に まだ読み込んでいない プラグイン への フィルターフック や アクションフックを行っても 後読みの プラグイン 方が 動作してしまうので 効いてない という事になります。(特にremove_actionやremove_filter)
全ての フィルターフック や アクションフック が そうという訳ではありませんが事前に潰していく事もおすすめです。

 

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

指定のプラグインを最後に読み込むようにする地味な アクションフック です。
my-plugin を最後に読み込むようにするには以下のコードを my-plugin.php に張り付けてください。
プラグイン(どれでも)を有効化した時に並べ替えて再保存します。

if ( ! function_exists( 'nendebcom_plugin_last_load' ) ) :
/*
 * my-plugin を最後に読み込むようにする。
 *
 * License: GPLv2 or later
*/
function nendebcom_plugin_last_load() {

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

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

	if( $this_activeplugin ){
		$new_active_plugins[] = $this_activeplugin;
	}

	if( ! empty( $new_active_plugins ) ){
		update_option( 'active_plugins' ,  $new_active_plugins );
	}
}
add_action( 'activated_plugin', 'nendebcom_plugin_last_load' );
endif; // nendebcom_plugin_last_load

 

スポンサードリンク



 

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

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

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

適応前
my_plugin-21

適応後 (コードを my-plugin.php に設置してプラグインを停止→有効化する)
my_plugin-22
これで my-plugin が一番下になりました。

参考

https://wordpress.org/support/topic/how-to-change-plugins-load-order?replies=11
https://wordpress.org/support/topic/enhancement-loading-the-plugin