孩子主题,凌驾于父母主题之上

时间:2013-03-16 作者:TheWebs

我了解以下有关函数的内容。php:

与风格不同。css,功能。子主题的php不会覆盖父主题的对应主题。相反,它是在父函数之外加载的。php。(Specifically, it is loaded right before the parent’s file.)

这种逻辑的问题是,在我的框架中,某些情况下是通过动作挂钩加载的。例如,您可以通过以下方式关闭子主题中的管理选项remove_action()

然而,根据上述逻辑,加载管理选项的操作在技术上直到子主题运行之后才加载。php。

因此,从未创建动作,也没有在技术上添加相关功能。所以has\\u action()在子主题中总是返回false。(或者至少在这种情况下对我来说是这样)。

我需要什么?我需要父主题函数。先加载php,然后再加载子主题。或者至少是第一个加载的对象。

有些人建议在子主题函数中执行任何操作之前,都需要使用父主题函数。php。

这是处理这种情况的正确方法吗?需要父主题功能的位置。php在孩子之前加载?

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

答案是通过在父主题所连接的动作之前运行的动作删除子主题中的内容,所有事情都应该在某种动作中发生。

例如,在父主题中:

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 );

结束

相关推荐