Получить путь к другому плагину

10

Чтобы получить путь к плагину, вы можете использовать plugin_dir_path(__FILE__)- но это, очевидно, должно быть вызвано из плагина.

Как вы можете надежно получить путь к плагину B ( pluginb/pluginb.php) из плагина A?

Изменить: Предполагается, что вы знаете, что за плагин вы ищете (на самом деле вы можете получить их от get_plugins()). Но я бы хотел, чтобы это работало вообще.

Стивен Харрис
источник
Будет ли это применяться к любому плагину? или один / несколько в частности? Если последнее, они ваши или публичные релизы?
TheDeadMedic
Итак, я предполагаю, что вы знаете, что за плагин вам нужен: например pluginb/pluginb.php, но его сторонний.
Стивен Харрис

Ответы:

9

Мое лучшее предположение будет:

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

return $dir;

Однако опасность здесь по-прежнему заключается в предположении о «базовом имени» плагина - хорошо написанный плагин все равно будет функционировать, даже если его каталог и / или основной файл были переименованы (по какой-либо причине).

Это восходит к моему первоначальному комментарию - в зависимости от того, на какой сторонний плагин он ссылается, многие авторы определяют свои собственные методы / константы для хранения пути к плагину - имело бы смысл проверить их существование и использовать их вместо этого (если доступно ).

TheDeadMedic
источник
Ах, хорошо, я обновил вопрос :). Вы можете получить слаг подключаемых модулей get_plugins()- в моем случае достаточно. Если вам нужен какой-то конкретный плагин, и нет ничего лучше, я думаю, вы можете искать плагин по имени в get_plugins().
Стивен Харрис
+1 В идеале хотелось бы избегать использования констант - но это решение по крайней мере проверяет их использование :) - и как ядро, кажется, делает вещи.
Стивен Харрис
2

Таким образом, один из методов заключается в том, чтобы вызвать 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';
Стивен Харрис
источник
Я бы посоветовал против этого, поскольку есть предположение, что плагин B находится в том же каталоге, что и A (что не обязательно будет иметь место, аля MU плагины).
TheDeadMedic
Спасибо, думал, что будет что-то, что я буду скучать :)
Стивен Харрис