覆盖WordPress中的函数

时间:2014-05-09 14:19:49

标签: php wordpress

我有一个插件,因为我需要更改一些文本,但是这个函数没有钩子可以使用。

通常使用remove_action()remove_filter()覆盖该功能。对于这两个函数,我们需要覆盖过滤器名称。但是这个插件功能不会添加任何过滤器。

现在我需要覆盖这个功能。

例如

插件中的Plugin.php

function plugin(){
    echo 'hello';
    echo 'welcome you';
}

主题中的Function.php

我想将plugin.php中的函数plugin()转换为

function theme_plugin(){
    echo 'hello';
    echo 'You are welcome';
}

add_action没有plugin()

如何覆盖plugin()theme_plugin()

2 个答案:

答案 0 :(得分:2)

看这里Redefining PHP function?,你不能覆盖php功能或超载它。你必须找到解决问题的另一种方法。

此致

答案 1 :(得分:0)

如果我是对的,您可以使用以下链接:http://sltaylor.co.uk/blog/customizing-new-user-email-pluggable-function/

****编辑**

我对wordpress没有多少经验。但是有人要求同样的事:Overriding a theme function from plugin in WordPress

明确的答案是:

除非该函数被覆盖,否则不行。这是基本的PHP。您无法重新定义函数。如果你尝试,你会得到一个致命的错误。

写入部分WordPress被覆盖。看看/wp-includes/pluggable.php。其中的每个函数都包含在if(!function_exists(...))条件中。除非你的主题做同样的事情,有些功能也做了,否则你不能覆盖。

查找可能对您有所帮助的过滤器。

查看您的代码,您应该可以解开它。只要确保将钩子钩得足够晚。这不是一个好的解决方案,但是因为你破坏了主题功能,而且还必须知道主题正在使用的所有钩子函数的名称。

$ fragment中是否存在某些内容,或$ _POST或$ _GET或其他任何内容,您可以使用它来有条件地运行代码,其余部分单独使用。

无论如何,Wordpress是开源的,所以你可以自己更改代码吗?为什么只更改插件?