调用未定义的函数`get_plugin_data()`

时间:2011-05-22 作者:kaiser

我在一个文件中有一个类include_once() 从函数。我的主题的php。该类可以用作独立插件,也可以集成到主题中。

在类中,我要填充一个类变量(在__construct() 函数)使用本机wordpress函数get_plugin_data(). 虽然很有趣,但我发现以下错误:

调用未定义函数get_plugin_data()

我是不是要求插件数据太晚了,或者我还有什么问题?

谢谢

5 个回复
最合适的回答,由SO网友:mfields 整理而成

get\\u plugin\\u data()仅在管理部分中定义。您需要从插件的标题中获取哪些信息,以便在主题中显示这些信息?如果答案是none,我建议您在构造函数中放置一个条件调用。类似于:

if ( is_admin() ) {
    $var = get_plugin_data();
}

SO网友:Gleb Kemarsky

如果需要使用get_plugin_data 在前端,您可以在调用函数之前添加以下代码:

if( !function_exists(\'get_plugin_data\') ){
    require_once( ABSPATH . \'wp-admin/includes/plugin.php\' );
}

SO网友:luukvhoudt

你可能想知道有没有其他方法可以解决这个问题?至少我是这么做的,因为@mfields发布的解决方案对我不起作用。

在核心代码挖掘之后,我发现了一个非常有用的核心助手函数,它将帮助我们实现大致相同的结果。我说的是函数get_file_data().

作为第一个参数,我们需要一个指向主插件文件的绝对路径字符串。第二个参数是要检索的头的数组,请检查以下数组中的所有头。

$default_headers = array(
    \'Name\' => \'Plugin Name\',
    \'PluginURI\' => \'Plugin URI\',
    \'Version\' => \'Version\',
    \'Description\' => \'Description\',
    \'Author\' => \'Author\',
    \'AuthorURI\' => \'Author URI\',
    \'TextDomain\' => \'Text Domain\',
    \'DomainPath\' => \'Domain Path\',
    \'Network\' => \'Network\',
    // Site Wide Only is deprecated in favor of Network.
    \'_sitewide\' => \'Site Wide Only\',
);
第三个参数是“plugin”,不要告诉我为什么没有第三个参数它也能工作。

无论如何,这就是我现在使用的(它位于主插件文件中)。

$plugin_data = get_file_data(__FILE__, [
    \'Version\' => \'Version\',
    \'TextDomain\' => \'Text Domain\'
], \'plugin\');

SO网友:tver3305

基于@mfields和@gleb kemarsky answers,如果插件将由管理员使用,我们需要首先检查插件是否由管理员调用

if ( is_admin() ) {
    if( !function_exists(\'get_plugin_data\') ){
        require_once( ABSPATH . \'wp-admin/includes/plugin.php\' );
    }
    $plugin_data = get_plugin_data( __FILE__ );
}

SO网友:Alireza SA

您可以从以下代码中毫无问题地获得相关变量的值

//define this plugin  language
    defined(\'define_name\') or define(\'define_name\', get_file_data(__FILE__, [\'Lang\' => \'Text Domain\'], \'plugin\')[\'Lang\']);

结束

相关推荐