WordPressで自作のプラグインを使用する際に読み込み順が原因で上手く動かないことがあり、その回避方法のひとつとしてプラグインの読み込み順を変更する方法を知ったので備忘録。
プラグインを読み込む際に自作のプラグインを最初または最後に読み込むようにする方法です。
最初に読み込むようにする
プラグインが最初に読み込むようにするには、自作したプラグイン内に下記を記述します。
add_filter( 'pre_update_option_active_plugins', 'high_priority_active_plugins' );
function high_priority_active_plugins( $active_plugins, $old_value ) {
$this_plugin = str_replace( wp_normalize_path( WP_PLUGIN_DIR ).'/', '', wp_normalize_path( __FILE__ ) );
foreach ( $active_plugins as $no=>$path ) {
if ( $path == $this_plugin ) {
unset( $active_plugins[$no] );
array_unshift( $active_plugins, $this_plugin );
break;
}
}
return $active_plugins;
}
最後にロードされるようにする
プラグインが最後に読み込むようにするには、自作したプラグイン内に下記を記述します。
add_filter( 'pre_update_option_active_plugins', 'low_priority_active_plugins' );
function low_priority_active_plugins( $active_plugins, $old_value ) {
$this_plugin = str_replace( wp_normalize_path( WP_PLUGIN_DIR ).'/', '', wp_normalize_path( __FILE__ ) );
foreach ( $active_plugins as $no=>$path ) {
if ( $path == $this_plugin ) {
unset( $active_plugins[$no] );
$active_plugins[] = $this_plugin;
break;
}
}
return $active_plugins;
}
それぞれ記述時にプラグインを有効化している場合は一旦プラグインを停止し、再度有効化すれば読み込み順が変わっています。
他のプラグインで同じようなことをしていると変化しない場合もあるので、その際はフィルターの優先度を調整するなどしてください。
ちなみに、読み込み順の変化をわかりやすく見たい場合は、var_dump( get_option( 'active_plugins' ) );
を利用するとわかりやすいです。