Obter um caminho para um plug-in diferente

10

Para obter o caminho para um plug-in, você pode usar plugin_dir_path(__FILE__)- mas isso obviamente precisa ser chamado de dentro do plug-in.

Como você pode obter com segurança o caminho para o plug-in B ( pluginb/pluginb.php) no plug-in A?

Edit: Supõe-se que você conheça a lesma do plug-in que procura (na verdade você pode obtê-los get_plugins()). Mas eu gostaria que funcionasse geralmente.

Stephen Harris
fonte
Isso se aplica a algum plug-in? ou um / vários em particular? Nesse último caso, são seus, ou lançamentos públicos?
TheDeadMedic #
Então, suponho que você conheça a lesma do plug-in que procura: por exemplo pluginb/pluginb.php, mas é de terceiros.
Stephen Harris

Respostas:

9

Meu melhor palpite seria:

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

return $dir;

No entanto, o perigo aqui ainda é a suposição do "nome do base" do plug-in - um plug-in bem escrito ainda funcionará mesmo quando seu diretório e / ou arquivo principal tiver sido renomeado (por qualquer motivo).

Que remonta ao meu comentário original - dependendo do plug-in de terceiros a que se refere, muitos autores definem seus próprios métodos / constantes para manter o caminho do plug-in - faria sentido verificar sua existência e usá-los (se disponível) )

TheDeadMedic
fonte
Ah ok, eu atualizei a pergunta :). Você pode obter a lesma dos plug-ins get_plugins()- no meu caso de uso, há o suficiente. Se você é depois de alguns plug-in específico, e nada melhor está disponível, eu acho que você pode procurar o plug-in via nome get_plugins().
Stephen Harris
O +1 gostaria idealmente de evitar o uso de constantes - mas essa solução verifica pelo menos ao usá-las :) - e é como o núcleo parece fazer as coisas.
Stephen Harris
2

Portanto, um método é chamar plugin_dir_path()dentro do plug-in atual e substituir seu próprio nome de diretório de plug-in pelo do slug do plug-in que você procura ( pluginb/pluginb.php):

Portanto, dentro do nosso plug-in plugina/plugina.php,

$plugin_b = str_replace('plugina/','pluginb/pluginb.php',plugin_dir_path(__FILE__));
echo $plugin_b; //Prints path/to/pluginb/pluginb.php';
Stephen Harris
fonte
Eu desaconselharia isso, já que existe a suposição de que o plug-in B está no mesmo diretório que A (que não será necessariamente o caso, os plugins ala MU).
TheDeadMedic
Obrigado, pensei que seria algo que eu perca :)
Stephen Harris