web-dev-qa-db-ja.com

別のプラグインへのパスを取得する

プラグインへのパスを取得するにはplugin_dir_path(__FILE__)を使用することができます - しかしこれは明らかにプラグイン内から呼び出される必要があります。

どうすれば 確実に プラグインA内からプラグインB(pluginb/pluginb.php)へのパスを取得できますか?

編集: それはあなたがあなたが追いかけているプラ​​グインのスラッグを知っていると仮定した(実際にはあなたはget_plugins()からそれらを得ることができる)。しかし、私はそれが一般的に機能したいのですが。

10
Stephen Harris

私の一番の推測は、

if ( ! is_file( $dir = WPMU_PLUGIN_DIR . '/pluginb/pluginb.php' ) ) {
    if ( ! is_file( $dir = WP_PLUGIN_DIR . '/pluginb/pluginb.php' ) )
        $dir = null;
}

return $dir;

しかしながら、ここでの危険は依然としてプラグインの "basename"の仮定です - よく書かれたプラグインはそのディレクトリやメインファイル、あるいはその両方が(なんらかの理由で)リネームされていても機能します。

これは私の元のコメントに戻ります - which サードパーティプラグインによって異なりますが、多くの作者はプラグインパスを保持するために独自のメソッド/定数を定義しています - 代わりに(利用可能な場合).

9
TheDeadMedic

したがって、現在のプラグイン内で plugin_dir_path() を呼び出して、自分のプラグインディレクトリ名を後に続くプラグインのスラッグディレクトリ名に置き換える方法があります(pluginb/pluginb.php)。

プラグインplugina/plugina.phpの中では、

$plugin_b = str_replace('plugina/','pluginb/pluginb.php',plugin_dir_path(__FILE__));
echo $plugin_b; //Prints path/to/pluginb/pluginb.php';
2
Stephen Harris

PluginAでWP_PLUGIN_DIR定数を使用してください。例えば:

include_once(WP_PLUGIN_DIR.'/pluginb/pluginb.php');

追加情報: https://codex.wordpress.org/Determining_Plugin_and_Content_Directories

0
Harkály Gergő