0

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

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

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

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

这个在插件文件中声明:

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

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

谢谢!

4

1 回答 1

1

在开发 WordPress 主题时,Codex 说

主题需要使用唯一的 slug 作为公共命名空间中任何内容的前缀,包括所有自定义函数名称、类、挂钩、公共/全局变量、数据库条目(主题选项、发布自定义元数据等)

So, the standard solution to the problem would be to use a unique slug to prefix the public function, based on the name of the theme.

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

If you're familiar with PHP classes, and OOP in general, one approach that people use to minimise changes (and typing out slugs!) is to wrap custom functions up in a class. That approach (as described here and to some degree in the answers to this (slightly annoyed!) question encapsulates your custom functions in a class, so only the class name itself appears in the global namespace.

于 2013-03-29T21:46:22.713 回答