在主题和插件中声明的Wordpress admin_ini,休息

时间:2013-03-29 21:36:48

标签: php wordpress

我遇到了一个新的,现成的,我刚刚完成定制的wordpress主题的问题。当我在我的生产机器上安装它(有很多插件)时,网站会抛出一个错误:

致命错误:无法重新声明admin_init()

以及两个实例的路径。当我查找它们时,我看到在主题文件中声明了这个函数:

add_action('admin_init', 'admin_init');
function admin_init()
{....

并在插件文件中声明了这个:

add_action("admin_init", "admin_init");
function admin_init(){...

显然错误表明这是不允许的。但我的问题是,解决这个问题的最佳方式是什么,所以主题和插件都能获得他们需要的工作?在这种情况下,我会将“最佳”定义为在更新时需要最少量保姆的解决方案(插件和主题...认为插件可能比主题更频繁地更新)。

谢谢!

1 个答案:

答案 0 :(得分:0)

开发WordPress主题时,the Codex says

  

主题需要使用独特的slug作为任何内容的前缀   public命名空间,包括所有自定义函数名,类,   钩子,公共/全局变量,数据库条目(主题选项,帖子   自定义元数据等。)

因此,问题的标准解决方案是根据主题的名称使用唯一的slug为公共函数添加前缀。

add_action('admin_init', 'my_theme_slug_admin_init');
function my_theme_slug_admin_init()
{....

如果您熟悉PHP类和OOP,那么人们用来最小化更改(并输入slu!!)的一种方法是将自定义函数包装在一个类中。这种方法(如here所述,在某种程度上在the answers to this (slightly annoyed!) question中将自定义函数封装在一个类中,因此只有类名本身出现在全局名称空间中。