如何在 Wordpress 的插件文件中使用主题的功能

How use theme's function into plugin's file in Wordpress

我正在构建一个简单的 wordpress 插件,并尝试将主题的功能用于插件的文件,但它说 "Call to undefined function",而该功能存在于当前活动 [=16] 的 themes.php =] 函数在主题文件中使用,但在插件文件中无法访问,任何人都可以指导如何做? 而我必须附加带有主题的插件作为强制性插件。

谢谢

插件在主题之前加载,因此在您调用它时函数尚未定义。改为在 init 等钩子上执行代码。

例如

function wpse_my_plugin_init() {
    myPreviouslyUndefinedThemeFunction();
}
add_action( 'init', 'wpse_my_plugin_init' );

请在此处查看挂钩选项列表:https://codex.wordpress.org/Plugin_API/Action_Reference

您必须调用此代码的最早机会是 after_setup_theme

另一方面,我建议重新考虑这种方法。一个插件应该是一个独立的模块;它不应该与您的主题相关联。

您的 approach/design 存在严重缺陷。插件功能不应该依赖于主题功能。正如@NathanDawson 已经指出的那样,首先加载插件,然后是 child 主题函数,然后是 parent 主题函数,所以你的方法永远不会像缩进或没有很多不必要的臃肿代码那样工作

插件旨在扩展 site 功能,而不是 theme 功能。我认为这是您的想法存在严重缺陷的地方,很可能是由于缺乏关于谁应该做什么以及何时做的知识

正如我所说,插件应该为网站提供功能。 favicons、自定义 post 类型、自定义分类法、短代码、小部件、相关 post 和重写规则 等功能应该 放在插件中。这为您的网站提供了功能,这只是意味着,当您更改主题时,这些功能不会更改或不会受到影响。此外,如果插件被删除,它不会改变主题的外观和操作方式。

主题特定功能是为主题本身提供功能的功能。没有这些功能,主题就会失去功能或外观。它只是意味着主题发生了变化。这些函数包括将样式表和脚本排入队列的函数、主题支持函数、侧边栏、自定义 headers 和背景以及注册图像大小。

如果您打算制作依赖于主题代码的插件,您应该寻求创建一个 child 主题,因为 child 主题旨在扩展主主题。 Child 主题继承了 parent 主题的所有功能,并且可以扩展、修改或添加新功能到 parent 主题。

总而言之,通过使插件依赖于主题代码,您会使您的网站非常容易遭到破坏。如果你改变你的主题,你会破坏你的网站,因为你会破坏你的插件。这不是插件和主题交互的方式。相反,通过创建 child 主题,您可以避免这种风险,因为 child 主题 不能 在没有 parent 主题的情况下激活可以同时激活任意两个主题吗?