先于子主题函数加载父主题文件.php

时间:2014-01-21 作者:MiracleGotMojo

我正在创建一个主题框架,以便在我开发的未来wordpress主题中使用。我想在子主题起作用之前,在父主题中包含从属文件,例如类。php已加载。这样子主题就不需要包含类。

我将尝试演示一个示例:

父主题-文件。php:

require_once get_template_directory().\'/classes/Core.php\';
require_once get_template_directory().\'/classes/Core_View.php\';
$CoreView = new Core_View();
$CoreView->init();
子主题-函数。php:

require_once get_template_directory().\'/classes/ContentSidebarView.php\';
$ContentSidebarView = new ContentSidebarView();
$ContentSidebarView->init();
ContentSidebarView类文件:

Class ContentSidebarView extends Core_View{

    public function init(){
        // Do Something
    }

}
当前,我得到一个错误,即在使用子主题时找不到类Core\\u视图。如果我只使用父主题,情况就不是这样了。

我想要的是:我只需要子主题中的模板,然后启动它。这意味着必须已经加载Core\\u视图。

我也愿意接受关于如何启动模板的建议。也许在子主题索引文件中会更好?

2 个回复
SO网友:Chip Bennett

这个functions.php 文件在执行plugins_loaded, 带子主题functions.php 在父主题之前执行functions.php. 这意味着,为了在父主题之后加载子主题中的功能子文件functions.php 执行时,只需挂接include()plugins_loaded.

出于这种目的通常安全的行动是after_setup_theme:

function wpse130681_load_dependent_functional_files() {
    require_once get_template_directory().\'/classes/ContentSidebarView.php\';
    $ContentSidebarView = new ContentSidebarView();
    $ContentSidebarView->init();
}
add_action( \'after_setup_theme\', \'wpse130681_load_dependent_functional_files\' );
也就是说:如果你遇到像这样的问题,首先你可能做错了什么。仅从代码示例中猜测:

将类实例化挂钩到适当的挂钩中,例如init

SO网友:fuxia

在父主题中提供自定义操作:

do_action( get_template() . \'_loaded\', $api_class_instance );
在子主题中,在该挂钩上运行第一个代码,而不是更早:

add_action( get_template() . \'_loaded\', function( $api_class_instance ) {
    $api_class_instance->some_public_method();
});

结束

相关推荐

WP_Query in functions.php

我有一些代码要转换成函数。它工作得很好,直到我将其包装到所述函数中: $args = array( \'posts_per_page\' => -1, \'post_type\' => \'asset\', \'category_name\' => $cat ); $cat_query = new WP_Query( $args );