如何在回调函数中包含单独类的PHP文件

时间:2018-04-19 作者:jogesh_pi

我在回调函数中包含单独的PHP文件时遇到了问题。

add_menu_page(\'Keyword Analyzer\', \'Keyword Analyzer\', \'manage_options\', 
              \'keyword_analyzer_menu\', \'Key_Analyzer_Groups::init\');
My Key\\u Analyzer\\u Groups类具有以下代码:

class Key_Analyzer_Groups {



    public static function init() {

        include_once plugin_dir_path( dirname( __FILE__ ) ) . \'admin/templates/groups.php\';
    }
}
但是如果我直接在init() 函数然后输出按预期工作,但不与包含的文件一起工作。

我确信应该有一些技巧来分离视图模板。请把我引向正确的方向。

文件夹结构:

plugin
- admin
  - views
   - key-analyzer-groups.php ( Key_Analyzer_Groups CLASS )
  - templates
   - groups.php ( Holds HTML Parts )

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您的问题是用于包含文件的路径。

plugin_dir_path() 只需获取给定文件/目录的目录,该目录后面有一个斜杠。因此,如果您的代码在这里:

plugin/admin/views/key-analyzer-groups.php
那么dirname( __FILE__ ) 将返回

plugin/admin/views
所以plugin_dir_path( dirname( __FILE__ ) ) 将返回

plugin/admin/
这意味着您正在尝试包括以下路径:

plugin/admin/admin/templates/groups.php
这是不存在的。

如果您想通过可靠的方式获取插件在整个代码中使用的目录,那么您应该在根插件文件中定义一个返回路径的函数,然后在整个代码中使用该函数:

function key_analyzer_plugin_path() {
    return plugin_dir_path( __FILE__ );
}
然后在其他文件中使用该功能,以包括:

class Key_Analyzer_Groups {
    public static function init() {
        include_once key_analyzer_plugin_path() . \'admin/templates/groups.php\';
    }
}
您还可以调整此方法来创建一个函数,用于在插件中包含文件:

function key_analyzer_include( $file ) {
    $file = ltrim( $file, \'/\' );

    include plugin_dir_path( __FILE__ ) . $file;
}
现在,您可以使用该函数通过传递一个相对于主插件文件的路径来包含所有文件:

class Key_Analyzer_Groups {
    public static function init() {
        key_analyzer_include( \'admin/templates/groups.php\' );
    }
}

结束