Obtenez un chemin vers un autre plugin

10

Pour obtenir le chemin vers un plugin, vous pouvez utiliser plugin_dir_path(__FILE__)- mais cela doit évidemment être appelé à partir du plug-in.

Comment obtenir de manière fiable le chemin vers le plug-in B ( pluginb/pluginb.php) à partir du plug-in A?

Edit: il est supposé que vous connaissez le slug du plug-in que vous recherchez (en fait, vous pouvez les obtenir get_plugins()). Mais j'aimerais que cela fonctionne en général.

Stephen Harris
la source
Cela s'appliquerait-il à n'importe quel plugin? ou un / plusieurs en particulier? Dans ce dernier cas, s'agit-il des vôtres ou de versions publiques?
TheDeadMedic
Je suppose donc que vous connaissez le slug du plug-in que vous recherchez: par exemple pluginb/pluginb.php, mais son tiers.
Stephen Harris

Réponses:

9

Ma meilleure supposition serait:

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

return $dir;

Cependant, le danger ici est toujours l'hypothèse du "nom de base" du plugin - un plugin bien écrit continuera de fonctionner même lorsque son répertoire et / ou son fichier principal a été renommé (pour une raison quelconque).

Ce qui revient à mon commentaire d'origine - selon le plugin tiers auquel il se réfère, de nombreux auteurs définissent leurs propres méthodes / constantes pour conserver le chemin du plugin - il serait logique de vérifier leur existence et de les utiliser à la place (si disponibles ).

TheDeadMedic
la source
Ah ok, j'ai mis à jour la question :). Vous pouvez obtenir le plugin des plugins get_plugins()- dans mon cas d'utilisation, il y en a assez. Si vous recherchez un plug-in spécifique et rien de mieux n'est disponible, je suppose que vous pouvez rechercher le plug-in via nom dans get_plugins().
Stephen Harris
+1 J'aimerais idéalement éviter d'utiliser des constantes - mais cette solution vérifie au moins lors de leur utilisation :) - et c'est la façon dont le noyau semble faire les choses.
Stephen Harris
2

Ainsi, une méthode consiste à appeler plugin_dir_path()dans le plug-in actuel et à remplacer votre propre nom de répertoire de plug-in par celui du slug du plug-in que vous recherchez ( pluginb/pluginb.php):

Donc, dans notre 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
la source
Je déconseille cela, car on suppose que le plugin B se trouve dans le même répertoire que A (ce qui ne sera pas nécessairement le cas, ala MU plugins).
TheDeadMedic
Merci, j'ai pensé qu'il y aurait quelque chose qui me manquerait :)
Stephen Harris