WordPress:プラグインのロード順を変更する方法

WordPress:プラグインのロード順を変更する方法

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;
}

それぞれ記述時にプラグインを有効化している場合は一旦プラグインを停止し、再度有効化すればロード順が変わっています。
ロード順の変化をわかりやすく見たい場合は「WordPress:現在有効化されているプラグインとその読み込み順を確認する方法」で紹介している方法を利用するなどしてください。
また、他のプラグインで同じようなことをしていると変化しない場合もあるので、その時はフィルターの優先度を調整するなどしてください。

この方法は以下を参考にさせてもらいました。

Close the search window,
please press close button or esc key.