如何在孩子主题之前加载Parent_Theme函数.php?

时间:2011-02-21 作者:kaiser

我的问题是我必须加载我的父主题functions.php 我的子主题之前的文件functions.php 文件加载。设置和;初始化过程。我查看了/wp\\u core\\u root/wp设置中的挂钩。php(名称:do_action(\'setup_theme\');).

问题是我不知道如何连接到那里,因为我得到的第一个文件是子主题的functions.php, 所以没有add_action( \'setup_theme\', \'my_init_function\' ); 将起作用。

编辑:
a)我知道插件加载时间早于主题,因此甚至可以访问初始查询,但我不想依赖插件
b)以下是wp设置中的代码(简称)。php文件

// happens a lot earlier:  
do_action( \'plugins_loaded\' );

// localize stuff happening here
    do_action( \'setup_theme\' );

        // Load the functions for the active theme, for both parent and child theme if applicable.
        if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . \'/functions.php\' ) )
            include( STYLESHEETPATH . \'/functions.php\' );
        if ( file_exists( TEMPLATEPATH . \'/functions.php\' ) )
            include( TEMPLATEPATH . \'/functions.php\' );
    // first available hook, *after* functions.php was loaded
    do_action( \'after_setup_theme\' );
我想避免两件事:第一,向用户解释很多。其次,如果不小心删除了父初始化过程而割断了绳子,则有人可能会打破任何东西。人们应该只在功能内部玩。php,而不必冒着在不知情的情况下破坏任何东西的风险。

换句话说:我如何保持我的子主题功能。php文件是干净的,但是父主题引导程序已经完成了吗?

有什么想法吗?非常感谢!

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

贾斯汀·塔洛克最近写了一篇关于making a better functions.php file<如果我没记错的话,他是在哪里处理这个问题的。

不幸的是,他的网站现在已经关闭了,所以我现在只能依靠我的记忆了。

您在正确的轨道上after_setup_theme

据我所知,诀窍是将过滤器和操作包装到它的函数中
参见下面的示例both 父级和子级functions.php 文件千言万语的一点点代码-您的父主题function.php 应该是这样的:

add_action( \'after_setup_theme\', \'your_parent_theme_setup\', 9 );
function your_parent_theme_setup() {    
    add_action(admin_init, your_admin_init);
    add_filter(the_content, your_content_filter);
}

function your_admin_init () {
...
}

function your_content_filter() {
...
}

SO网友:Otto

首先,你不能。子主题的功能。php总是先加载,句号。

其次,主题无法挂接到setup\\u主题。插件可以,但主题可以挂钩的第一件事是在\\u setup\\u theme之后。

如果父级设计正确,则子级可以重写父级中的函数和内容,但只能在首先加载时进行。

广义地说,如果您认为需要首先加载父函数文件,那么您可能在某种程度上做错了。你需要解释更大的问题。

SO网友:scribu

因此,您试图从子函数执行代码。php,但在加载父主题之后。简单,只需使用自定义操作:

在…的结尾parent/functions.php:

do_action(\'parent_loaded\');
在中child/functions.php:

function parent_loaded() {
    // do init stuff
}
add_action(\'parent_loaded\', \'parent_loaded\');
所有值得称道的家长主题都是这样做的。此外,他们还有其他几个动作和过滤器,供子主题使用。

SO网友:Anh Tran

为什么不包括父主题functions.php 子主题中的文件functions.php 文件,如下所示:

在子主题中functions.php 文件:

if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( TEMPLATEPATH . \'/functions.php\' ) )
            include( TEMPLATEPATH . \'/functions.php\' );

// code of child theme\'s functions.php file continues here
这样,父主题的functions.php 文件未更改(有时这很重要)。

SO网友:Softmixt

我之前也遇到过类似的问题,我通过在父级中创建一个额外的空“child functions.php”,并在我想在child中使用的文件/函数之后包含到“functions.php”(父级)中来解决它,然后在子主题中创建一个“child functions.php”文件,在那里我可以开始模拟子函数。php在父级之后运行并不是一个优雅的解决方案,但确实做到了这一点。

结束

相关推荐

获取在Functions.php中设置的变量,并在我的Custom Post模板中回显它们

在我的函数中设置了以下函数。php文件,以允许我的自定义帖子类型“Slideshow”工作。add_action( \'the_post\', \'paginate_slide\' ); function paginate_slide( $post ) { global $pages, $multipage, $numpages; if( is_single() && get_post_type() == \'lom_s