我了解关于functions.php的以下内容:
与style.css不同,子主题的functions.php不覆盖父主题的对应项。相反,它是在父functions.php之外加载的。(具体来说,它是在父文件之前加载的。)
这个逻辑的问题在于,在我的框架中,在某些情况下是通过动作挂钩加载的。例如,您可以通过remove_action()关闭子主题中的管理选项
不管上面的逻辑如何,加载管理选项的操作在技术上直到子主题functions.php之后才会加载。
因此,该操作从未创建,也没有在技术上添加它的关联函数。因此,has_action()总是在子主题中返回false。(至少在这种情况下对我来说是如此)。
我需要什么?我需要父主题functions.php先加载子主题。或者至少是第一个加载的对象。
有些人建议,在执行子主题functions.php中的任何操作之前,都需要使用父主题函数。
这是处理这种情况的正确方法吗?在哪里需要父主题functions.php在子主题之前加载?
发布于 2013-03-16 04:50:18
答案是通过在父主题已经连接到的操作之前运行的操作删除子主题中的内容,所有事情都应该发生在某种操作中。
例如,在父主题中:
function do_something(){
// something happens here
}
add_action( 'init', 'do_something' );然后以你的孩子为主题:
function check_something(){
remove_action( 'init', 'do_something' );
add_action( 'init', 'do_my_own_thing' );
}
add_action( 'after_setup_theme', 'check_something' );或者另一个例子,在父主题中:
function some_func(){
add_action( 'admin_menu', 'do_admin_things' );
}
add_action('init', 'some_func');
function do_admin_things(){
// admin things
}然后在子主题中,用稍后的优先级连接init:
function check_admin_things(){
remove_action( 'admin_menu', 'do_admin_things' );
}
add_action( 'init', 'check_admin_things', 100 );https://wordpress.stackexchange.com/questions/91127
复制相似问题