我目前正在编写我的第一个Wordpress插件。因为我很确定这不会是我的最后一个,所以我尝试将尽可能多的代码放入公共代码文件中,以便以后在其他插件中重用。
我正在使用命名空间和OOP编程来允许像我在C ++项目中那样重用代码(就PHP而言)。
然而在WP / PHP中存在一个没有明显解决方案的问题:我应该在哪里放置共享代码文件? Wordpress类合并了全局应用程序中的所有代码。因此,将代码复制到每个插件文件夹中可能意味着潜在的冲突和/或随机使用具有相同内容但不同开发阶段的代码文件。这也会造成丑陋的裁员。
我没有找到专门的中央存储空间。
将共享代码放在“plugins”文件夹中是一个坏主意,因为每个共享代码文件都被视为一个单独的插件。
我可以通过一个特殊的库插件添加所有共享代码(afaik这将使所包含的代码对所有其他插件可见)但这看起来有点奇怪。我也不确定这是否可靠。
什么是最佳解决方案?
答案 0 :(得分:1)
Wordpress有点像插件中的可重用性。 据我所知,没有集成的方法来重用WordPress插件中的代码。
你可以尝试一下 https://github.com/x-team/wp-plugin-dependencies 插件来管理插件之间的依赖关系。因此,您可以将通用代码存储在其他人需要的插件下。
其他方法是使用Worpress钩子/动作系统。因此,在执行库插件挂钩之前,您必须对插件初始化进行设置。
有激活/停用挂钩,所以当框架丢失时你可以做一些事情。
看看这些链接:
http://tommcfarlin.com/plugin-activation-message/
https://codex.wordpress.org/Function_Reference/register_activation_hook
希望这有帮助!
答案 1 :(得分:0)
@adamiscoding:我正在尝试你提出的钩子解决方案,将framework-plugin推到插件加载队列的第一位。我发现了一些应该允许这样做的代码片段,如下所示:
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')
之后执行?