Как получить метаданные плагина, не зная папку плагина?

Я ищу, чтобы получить метаданные о установленном плагине из другого плагина. Теоретически, чтобы получить версию, я мог бы сделать:

$data = get_plugin_data( 'expected_plugin_folder_name'); $version = $data['version']; 

Но это не сработало бы, если бы конечный пользователь изменил имя плагина, на котором я пытаюсь получить метаданные.

Я думаю, что решение состоит в поиске в массиве, возвращенном из get_plugins() . Липкая часть – это ключи массива, называемые для пути, относительно каталога плагина файла плагина, который возвращает меня к той же проблеме, что и раньше, – конечный пользователь мог изменить имя каталога плагина.

Есть ли в любом случае, чтобы получить метаданные без указания папки плагина? Возможно, указав пул, uri, имя и т. Д. …

Solutions Collecting From Web of "Как получить метаданные плагина, не зная папку плагина?"

Если вы знаете функцию или класс основного файла плагина, вы можете использовать Reflection API .

Пример с моим плагином T5 Расположение таксономии

 add_action( 'plugins_loaded', function() { $class = 'T5_Taxonomy_Location'; if ( ! class_exists( $class ) ) return; add_action( 'admin_footer', function() use ( $class ) { $reflection = new ReflectionClass( $class ); $file = $reflection->getFileName(); $data = get_plugin_data( $file ); print '<pre>$data = ' . esc_html( var_export( $data, TRUE ) ) . '</pre>'; }); }); 

результат

 $data = array ( 'Name' => 'T5 Taxonomy Location', 'PluginURI' => 'https://github.com/toscho/t5-taxonomy-location', 'Version' => '2012.09.11', 'Description' => 'Creates a new taxonomy for locations. <cite>By <a href="http://toscho.de" title="Visit author homepage">Thomas Scholz </a>.</cite>', 'Author' => '<a href="http://toscho.de" title="Visit author homepage">Thomas Scholz </a>', 'AuthorURI' => 'http://toscho.de', 'TextDomain' => 'plugin_t5_tax_location', 'DomainPath' => '/languages', 'Network' => false, 'Title' => '<a href="https://github.com/toscho/t5-taxonomy-location" title="Visit plugin homepage">T5 Taxonomy Location</a>', 'AuthorName' => 'Thomas Scholz ', ) 

Для функции используйте ReflectionFunction . Он наследует метод getFileName() тоже.