我正在构建一个简单的wordpress插件,并试图将主题的功能用于插件的文件中,但它正在说"调用未定义的函数",而该函数存在在当前活动主题的themes.php中。该功能在主题文件中使用但无法在插件文件中访问,任何人都可以指导该怎么做? 虽然我必须将插件与主题作为强制插件附加。
谢谢
答案 0 :(得分:1)
插件在主题之前加载,因此在您调用它时函数尚未定义。在init
之类的钩子上执行代码。
E.g。
function wpse_my_plugin_init() {
myPreviouslyUndefinedThemeFunction();
}
add_action( 'init', 'wpse_my_plugin_init' );
请点击此处查看挂钩选项列表:https://codex.wordpress.org/Plugin_API/Action_Reference
您必须调用此代码的最早机会是after_setup_theme
。
另一方面,我建议重新考虑这种方法。插件应该是一个独立的模块;它不应该与你的主题联系在一起。
答案 1 :(得分:0)
您的方法/设计存在严重缺陷。插件功能永远不应该依赖于主题功能。正如@NathanDawson已经指出的那样,插件首先被加载,然后子主题函数然后加载父主题函数,所以你的方法永远不会像缩进或没有大量不必要的膨胀代码那样工作
插件旨在扩展网站功能,而不是主题功能。我认为这是你的想法存在严重缺陷的地方,而且很可能是由于缺乏关于谁应该做什么以及什么时候做什么的知识
正如我所说,插件应该为网站提供功能。功能,如favicon,自定义帖子类型,自定义分类,短代码,小部件,相关帖子和重写规则应该在插件中。这为您的网站提供了功能,这只是意味着,当您更改主题时,这些功能不会发生变化或者不会受到影响。此外,如果删除该插件,它不会改变主题的外观和操作方式。
主题特定功能是为主题本身提供功能的功能。没有这些功能,主题就会失去功能或外观。它只是意味着主题的变化。这些功能包括排列样式表和脚本的功能,主题支持功能,侧边栏,自定义标题和背景以及注册图像大小。
如果您打算使用主题代码制作插件,则应该创建子主题,因为子主题旨在扩展主题。子主题从父主题继承所有功能,并可以扩展,修改或添加新功能到父主题。
总而言之,通过使插件依赖于主题代码,您使您的网站非常容易受到破坏。如果您更改主题,您将破坏您的网站,因为您将破坏您的插件。这不是插件和主题如何进行交互。通过创建子主题,您可以消除这种风险,因为如果父主题不在主题文件夹中,则激活子主题 ,并且同时不能激活任何两个主题。