在wordpress中覆盖功能(带钩子)

时间:2015-08-10 16:03:58

标签: php wordpress hook

我遇到这种情况:

父主题:

的functions.php

require_once(dirname(__FILE__) . "/includes/theme-functions.php");
require_once(dirname(__FILE__) . "/includes/theme-hooks.php"); 

主题function.php

function name_of_this_function() {
    // DO SOMETHING
}
add_action ('hook','name_of_this_function');

主题hooks.php

function hook() {
    do_action('hook');
}

如果以前调用过我的函数,我如何在我的子函数.php中覆盖该动作?我试过了:

remove_action ('hook','name_of_this_function');

但当然这会返回false

1 个答案:

答案 0 :(得分:1)

经过多次尝试(悲惨地失败)和大量在线阅读文档,我得到了答案。

解决方案位于" after_setup_theme"钩。

在我添加行动之前"在最重要的"父母的,这意味着我有两个标题,两个页脚等等。当然问题是我的functions.php无法删除尚未添加的内容。

这是由wordpress行为引起的,该行为在父主题之一之前运行子项的function.php。

此问题的解决方案是在设置主题后添加一个函数,其优先级强制它在父元素之后运行。这样,父进程的所有函数都将被初始化(父对象的设置被称为最后一个函数),我将能够删除一些动作。 这是语法:

add_action('after_setup_theme', 'my_setup', 3);
function my_setup(){
    /* CUSTOM FOOTER */
    remove_action('footer_hook','parent_site_info',99);
    add_action('footer_hook','site_info',99);
}

解决了这个问题。