共享公共库的主题和插件

时间:2011-10-13 作者:Tom Auger

我在WP\\U SE上看到了许多类似的问题,但我认为我的情况有点不同,因为我正在创建的公共库是我当然希望能够更新和维护的框架,但不是装饰——即:我不能创建一个依赖于库的主题,如果找不到库,就可以很好地降低主题。

Common Libraries

我有一组实用函数和一些类,我开发这些函数和类是为了真正加快WordPress定制的某些方面。我在自定义主题中广泛使用了它们,然后它们通常被捆绑在主题的某个子目录中。

现在我正在编写一个插件,我想在插件中使用这些库。对于插件来说,它们的逻辑位置应该在插件目录结构中的某种lib/或include/文件夹中。

当然,问题是如果我同时使用插件和主题,那么函数和类都会被声明两次,这会引发一个错误。Require\\u once没有意识到由于路径不同,它们是相同的代码库。

一种解决方案是将所有这些lib捆绑到一个单独的插件中,并让主题和插件利用此实用程序插件。但因为这些LIBessential 对于主题/插件的操作,插件must 在使用主题/插件时安装。展望未来,我不希望有人下载并安装我的主题,然后下载并安装一个插件,这样主题就可以工作了。所以这个解决方案对我来说似乎是不可能的。

一个主题或插件可以获取另一个插件并安装它吗?主题安装进程是否可以写入wp-content/themes? 插件激活过程也一样?

2 个回复
最合适的回答,由SO网友:scribu 整理而成

一个主题或插件可以获取另一个插件并安装它吗?

就主题而言,这是相当严肃的。看见https://github.com/thomasgriffin/TGM-Plugin-Activation

对于插件来说,这更为棘手,因为您不能在多个插件中捆绑相同的样板代码。看见http://wordpress.org/extend/plugins/plugin-dependencies/

SO网友:EarnestoDev

Method #1:创建一个只加载库的插件,并将其放置在/wp-content/mu-plugins (这些在常规插件/主题之前自动加载)文件夹。然后从其他地方移除您的库。

Method #2 (最佳方式):保护函数和类声明以防止名称冲突。

if(!function_exists(\'unduplicatable\')):
    function unduplicatable(){
        // Add code here
    }
endif;
或:

if(!class_exists(\'unduplicatable\')):
    class unduplicatable(){
        // Add code here
    }
endif;

if(!isset($global_variable)):
    // Prevent double initializations
    $global_variable = array();
endif;
问候

结束

相关推荐

Where are plugins located

我通常通过FTP下载和安装插件,但我已经从web界面安装了一些插件。我正在尝试将WP从远程移动到本地,我得到一个空白的WP管理屏幕。我认为是我的一个插件导致了这个问题。我已将wp-content/plugins重命名为wp-content/u-plugins,以禁用该文件夹中的所有插件。但我安装的插件没有出现在插件文件夹中,我认为这是导致wp管理屏幕空白的原因。请告知。谢谢