防止冗余的WordPress插件代码-共享代码文件的位置


Prevent redundant WordPress plugin code - location of shared code files

我现在正在写我的第一个WordPress插件。因为我很确定这不会是我的最后一个,所以我尽量把尽可能多的代码放入公共代码文件中,以便以后在其他插件中重用。

我正在使用名称空间和OOP编程来允许代码被重用,就像我在c++项目中所做的那样(只要PHP允许这样做)。

然而,在WordPress/PHP有一个问题没有明显的解决方案:我应该把共享代码文件?WordPress将所有代码合并到一个全局应用程序中。因此,将代码复制到每个插件文件夹中可能意味着潜在的冲突和/或随机使用具有相同内容但开发阶段不同的代码文件。此外,这会产生丑陋的冗余。

我没有找到一个专用的中央存储位置。

将共享代码放入"plugins"文件夹是一个坏主意,因为每个共享的代码文件将被视为一个单独的插件。

我可以通过一个特殊的库插件来添加所有共享代码(据我所知,这将使包含的代码对所有其他插件可见),但这似乎有点奇怪。我也不确定这是否可靠。

最好的解决方案是什么?

WordPress在插件的可重用性方面有点糟糕。据我所知,没有任何集成的方法来重用WordPress插件中的代码。

你可以尝试Plugin Dependencies Plugin来管理插件之间的依赖关系。所以你可以把你的泛型代码存储在一个插件下,而其他插件可能会需要。

其他方法是使用WordPress的钩子/动作系统。因此,你将不得不推迟你的插件初始化,直到库插件钩子执行。

有激活/停用钩子,所以你可以在框架缺失的时候做一些事情。

看看这些页:

  • 在WordPress中显示插件激活消息
  • 函数参考/寄存器激活钩子

关于adamiscoding的回答:我正在尝试提出的钩子解决方案,将框架插件推到插件加载队列的第一位。我找到了一些允许这样做的代码片段,比如下面的代码:

add_action('activated_plugin', 'load_this_plugin_first');
function load_this_plugin_first()
{
   $path = plugin_basename(dirname(__FILE__)).'/'.basename(__FILE__);
   if ( $plugins = get_option( 'active_plugins' ) ) {
      if ( $key = array_search( $path, $plugins ) ) {
         array_splice( $plugins, $key, 1 );
         array_unshift( $plugins, $path );
         update_option( 'active_plugins', $plugins );
      }
   }
}

如果框架插件没有安装/激活,我完全禁用依赖插件,所以在这种情况下,当加载插件管理页面时,我不会得到一堆关于丢失定义的错误。我使用以下检查:

if (!class_exists('Framework'MainClass'))
{
   if (is_admin())
   {
      // What to do here?
   }
}
else
{
   // Normal plugin code
}

这似乎可以正常工作。

目前我有点不确定在缺少框架的情况下我应该做什么。我可以自动关闭它。或者我可以显示一个持久的管理消息…但这并不容易,因为我会得到一个"意外输出"的警告。当由于消息代码行

而激活依赖插件时
echo "<div class='updated'><p>Plugin will not work without framework!</p></div>";

这就是为什么我尝试检查插件代码是否在激活期间执行,所以我可以在这种情况下抑制消息:

if (!function_exists('is_plugin_active'))
{
   echo "<div class='updated'><p>Plugin will not work without Framework!</p></div>";
}

这似乎也工作,但我想知道是否有更好的方法来检查插件是否在激活期间执行比function_exists('is_plugin_active') ?