问题描述
我收到了一个问题,我必须加载我的父主题的 functions.php
文件加载我的孩子主题的 functions.php
文件。这对于设置& init 程序。我看着/wp_core_root/wp-settings.php(命名为 do_action('setup_theme');
) 中的钩子。
问题是,我不知道如何挂在那里,因为我得到的第一个文件是孩子主题的 functions.php
,所以没有 add_action( 'setup_theme', 'my_init_function' );
将工作。
编辑:a) 我知道插件早于主题加载,因此即使是初始查询也可以访问,但我不想依赖插件。 b) 这是 wp-settings.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' );
我想避免两件事情:首先很多的说明给用户。第二,如果切断绳子意外删除父母的初始化程序,有人会打破任何事情的机会。人们只要在 functions.php 里面玩,而不用弄清楚什么就不用了。
换句话说:我如何保持我的小孩主题的 functions.php 文件干净,但父主题引导完成?
有任何想法吗?非常感谢!
最佳解决方案
Justin Tadlock 最近写了一篇关于制作一个更好的 functions.php 文件的伟大文章,其中 (如果我记得正确的话) 他处理这个确切的问题。
不幸的是,他的网站目前正在下降,所以现在我不得不依靠我的 memory 。
您正在 after_setup_theme
挂钩的正确轨道上。
-
据我所知,诀窍是将过滤器和操作包装到其功能中。参见下面的例子。
-
您可以在父和子
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() {
...
}
次佳解决方案
首先,你不能。孩子主题的 functions.php 总是先加载,期间。
二,主题不能挂钩到 setup_theme 。插件可以,但主题可以挂钩的第一件事是 after_setup_theme 。
如果您的父母设计正确,那么该子项能够覆盖父项中的功能和内容,但只有在首次加载时才可以。
一般来说,如果您认为您需要首先加载父级的函数文件,那么您可能会做错,不知何故。你需要解释更大的问题。
第三种解决方案
所以你试图从孩子的 functions.php 执行代码,但在父主题加载完毕之后。简单,只需使用自定义操作:
在 parent/functions.php
结束时:
do_action('parent_loaded');
在 child/functions.php
:
function parent_loaded() {
// do init stuff
}
add_action('parent_loaded', 'parent_loaded');
所有值得他们的盐的父母主题都是这样做的。此外,他们还有几个其他的操作和过滤器,以供儿童主题使用。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。