Every serious plugin developer probably has to deal with this problem: WordPress is not supporting composer or any dependency management by default. I have written a great plugin which I would like to put into the official repository on WordPress.org.

Problem is: I do not want to write all of those options pages (including network options pages) on my own - this is why I am using the CMB2 library. It is actually a well known framework used by a lot of WordPress developers in order to create options pages: https://github.com/CMB2/CMB2

Most probably it is not a good idea to put the CMB2 library into my Plugin (which would also require constant updates). But what other option do I have? What is a good way to deal with this problem?

  • Have you looked into how WooCommerce extensions make sure that WooCommerce is installed and activated? – kero Mar 19 '19 at 17:19
  • Unfortunately there really isn't a good solution for this issue. Either you include the library in your plugin, and then manage the updates to the library on the plugin repo, or you write the code for the meta boxes and options pages yourself. The only other option is if you want people to use the CMB plugin and consider yours an addon for that then you could use if (!class_exists('cmb_main_class_name)){ ... on your plugin init function – mrben522 Mar 19 '19 at 17:25
  • @mrben522 Already thought about that but for normal users it will be too difficult to install CMB2 themselves (which may even be removed from the repo). – Blackbam Mar 19 '19 at 18:28
  • 1
    In that case you're going to have to include the library in your plugin. It's not ideal but it's definitely not uncommon or particularly frowned upon in wordpress plugins. – mrben522 Mar 19 '19 at 18:40
  • @mrben522 Ok I see - thanks! – Blackbam Mar 19 '19 at 18:42

On your plugin activation hook method you can check if CMB plugin is installed and/or activated.

You can check this using the following methods:

  1. is_plugin_active(): only available from within the admin pages
  2. function_exists() or class_exists(): available anywhere once they are PHP core methods

If CMB is not installed, you can throw an error message in the panel with instructions to the user on how to install it.

This article has a great explanation on how to check WordPress Plugin Dependencies.

  • Great article on Plugin dependencies thanks! That might be helpful. Still I hope for some better solution. Otherwise we should think about going to wordpress.org for bothering the core developers with this issue. I know there is still no GOOD solution but ... – Blackbam Mar 19 '19 at 18:31
  • 2
    I updated the first link, Codex is deprecated, developer.wordpress.org is the new resource for information about WP core functionality – kero Mar 19 '19 at 18:38
  • @CaduDeCastroAlves Maybe you also add one or two sentences on how to handle libraries (as CMB2 was a plugin but now is only a library). mrben522 said it basically in the comments.Then I can accept. – Blackbam Mar 19 '19 at 18:43
  • @Blackbam CMB2 is not only a library. It's both available as a plugin AND a library. You've asked for an option. To implement this as a library you can follow the documentation here. It's very clear. – Cadu De Castro Alves Mar 19 '19 at 19:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.