我如何在不知道插件文件夹的情况下获取插件元数据?

时间:2013-11-30 作者:JPollock

我想从另一个插件获取关于已安装插件的元数据。理论上,要获得版本,我可以:

$data = get_plugin_data( \'expected_plugin_folder_name\');
$version = $data[\'version\'];
但是,如果最终用户更改了我要获取元数据的插件的名称,这将不起作用。

我认为解决方案是在get_plugins(). 最棘手的部分是数组键是根据路径命名的,相对于插件文件的插件目录,这让我回到了与之前相同的问题——最终用户可能更改了插件的目录名。

是否可以在不指定插件文件夹的情况下获取元数据?可能通过指定slug、uri、name等。。。

1 个回复
SO网友:fuxia

如果您知道插件主文件的函数或类,可以使用Reflection API.

我的插件示例T5 Taxonomy Location

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()

结束

相关推荐

在Header.php中显示自定义微件值

我将下面的代码用于自定义小部件。我在小部件中添加了一些字段,如:Title, Name 和复选框。现在一切都很好,但我想在标题中显示这些值。php。有什么想法或建议吗?add_action( \'widgets_init\', \'my_widget\' ); function my_widget() { register_widget( \'MY_Widget\' ); } class MY_Widget extends WP_Wid