I’m developing a couple of open-source plugins and a theme (all part of a “suite”) that all use the same third party PHP library. I’m wondering what is the best way to include it in WordPress. Here are some thoughts:
- put it in one of the plugins and require that plugin to be installed and activated
- create a special “core” plugin that does nothing but including it
- put it directly in
wp-content
Any thoughts on that matter?
If each plugin/theme functions on its own, then you should probably drop the the library in every theme/plugin.
Then just check to see if it a class or function from the third-party library exists before requiring it.
or
Alternatively, you could wrap every function/class/variable/constant from the third party library in a check to see if it exists, like pluggable functions.
If all of the plugins and the theme are dependent on one another, then it doesn’t really make much sense to divide them up and you should probably rethink that.
Bind all depended code to an action in the library plugin.
Sample code for the library plugin:
In your depended code do nothing before the action was called:
The library handles all the basic parts: check for proper PHP version, WordPress constants, multi-site setups etc.
The other code will do nothing if the action
'library_loaded'
is not called.Adding to answer by chrisguitarguy, if your libraries are in the form of PHP classes, then you can utilise spl_autoload_register() to load those classes if they haven’t already been loaded by another plugin. You can then bundle the libraries into your plugin and just use them, relying on the class loader to include them when appropriate. You can also use the class loader to load your own plugin’s classes.
e.g.
Since no official vendor directory exists, I would go for the “core” plugin that does nothing but include the library. You then make your plugins require that core plugin.
Putting the library in one of your real plugins would require the user to have that plugin enabled even though they may never want to use its functionality. A separate core plugin seems cleaner.
Putting it directly in wp-content looks like the worst solution.