Obtenga una ruta a un complemento diferente

10

Para obtener la ruta de acceso a un complemento, puede usarlo plugin_dir_path(__FILE__), pero esto obviamente debe llamarse desde el complemento.

¿Cómo puede obtener de manera confiable la ruta al complemento B ( pluginb/pluginb.php) desde el complemento A?

Editar: se supone que conoce la babosa del complemento que está buscando (en realidad puede obtenerlos get_plugins()). Pero me gustaría que funcione en general.

Stephen Harris
fuente
¿Se aplicaría esto a algún complemento? o uno / varios en particular? Si es esto último, ¿son suyos o lanzamientos públicos?
TheDeadMedic
Así que supongo que conoce la babosa del complemento que está buscando: por ejemplo pluginb/pluginb.php, pero es un tercero.
Stephen Harris

Respuestas:

9

Mi mejor suposición sería:

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

return $dir;

Sin embargo, el peligro aquí sigue siendo la suposición del "nombre base" del complemento: un complemento bien escrito seguirá funcionando incluso cuando se haya cambiado el nombre de su directorio y / o archivo principal (por cualquier razón).

Que se remonta a mi comentario original, - en función de la cual terceros plug-in esto se refiere, muchos autores definen sus métodos propios / constantes para mantener la trayectoria de complemento - que tendría sentido para comprobar su existencia y utilizar estos en su lugar (si está disponible )

TheDeadMedic
fuente
Ah ok, he actualizado la pregunta :). Puede obtener la babosa de los complementos get_plugins(), en mi caso de uso, hay suficiente. Si buscas algún complemento específico y no hay nada mejor disponible, supongo que puedes buscar el complemento a través del nombre get_plugins().
Stephen Harris
+1 Idealmente, me gustaría evitar el uso de constantes, pero esta solución al menos verifica cuando se usan :), y así es como el núcleo parece hacer las cosas.
Stephen Harris
2

Entonces, un método es llamar plugin_dir_path()dentro del complemento actual y reemplazar su propio nombre de directorio de complementos con el del slug del complemento que está buscando ( pluginb/pluginb.php):

Entonces, dentro de nuestro complemento 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
fuente
Aconsejaría en contra de esto, ya que existe la suposición de que el complemento B está en el mismo directorio que A (lo que no necesariamente será el caso, ala plugins MU).
TheDeadMedic
Gracias, pensé que habría algo que extrañaría :)
Stephen Harris