WordPress.org

Make WordPress Core

Opened 2 years ago

Last modified 7 months ago

#20241 accepted enhancement

make it possible for plugins to activate other plugins

Reported by: magnus78 Owned by: nacin
Milestone: Future Release Priority: normal
Severity: normal Version:
Component: Plugins Keywords: has-patch commit needs-unit-tests
Focuses: Cc:

Description

When creating a plugin that depends on other plugins, i would like to enable those plugins during activation of the main plugin.

This is currently not possible, as updates to active_plugins done by the other plugins get overwritten.

Please apply the attached patch to fix this.

Attachments (4)

allow_plugin_to_register_other_plugins.patch (1.9 KB) - added by magnus78 2 years ago.
proposed fix
allow_plugin_to_register_other_plugins_v2.patch (2.1 KB) - added by magnus78 2 years ago.
proposed fix
wptrac20241_allow_plugin_to_register_other_plugins_v3.patch (2.5 KB) - added by magnus78 2 years ago.
proposed fix, v3
20241.diff (7.3 KB) - added by nacin 10 months ago.

Download all attachments as: .zip

Change History (17)

comment:1 magnus782 years ago

Proposed fix 2 to take care of the sitewide version too...

comment:2 magnus782 years ago

Anything i need to do to move this patch forward?

comment:3 kurtpayne2 years ago

  • Cc kpayne@… added
  • Type changed from defect (bug) to feature request

scribu has done a nice write up on dependency management in plugins

http://scribu.net/wordpress/plugin-dependencies

And he's written a plugin to handle dependency management, too

http://wordpress.org/extend/plugins/plugin-dependencies/

comment:4 nacin2 years ago

These changes could potentially break backwards compatibility.

Dependencies aside, this is doable without any patch. You can use the activated_plugin hook, which fires after the option is updated. For deactivation, you could simply choose a later hook (even something like 'shutdown' would work, as would option_active_plugins).

comment:5 magnus782 years ago

Child plugins would indeed be nice, but it doesn't need to be either or. I'd see this patch more as a code fix than an actual feature...

How would it break backwards compatibility?
It's not doable without a patch afaikt. activated_plugin is run for every plugin not just *this* plugin like i want, i tried that first but ran into problems with plugins getting included multiple times (causing errors) and other strange problems.

Re option_active_plugins - did you mean updating the active_plugins option manually? That won't let the registration hook for each plugin run.

comment:6 magnus782 years ago

  • Type changed from feature request to defect (bug)

V3 fixes a problem with the patch wrt multisite.

Anything more i need to do?

comment:7 coffee2code2 years ago

  • Type changed from defect (bug) to feature request

comment:8 magnus782 years ago

I do see it as a bug fix, as it's not said anywhere that it shouldn't work, and i see no reason it shouldn't. If for some reason the fix isn't wanted, it should at least be documented that you're not allowed to activate other plugins from the registration hook.

comment:9 stephenh19882 years ago

  • Cc contact@… added

comment:10 nacin11 months ago

  • Component changed from General to Plugins
  • Milestone changed from Awaiting Review to 3.7
  • Owner set to nacin
  • Status changed from new to accepted
  • Type changed from feature request to enhancement

nacin10 months ago

comment:11 nacin10 months ago

  • Keywords commit added

20241.diff:

  • Re-queries the active_sitewide_plugins or active_plugins options before modifying them in activate_plugin(), once hooks are fired.
  • Waits until saving options in deactivate_plugins() to query and manipulate them.
  • Cleans up some hook documentation.

comment:12 nacin10 months ago

  • Keywords needs-unit-tests added
  • Milestone changed from 3.7 to Future Release

This could benefit from unit tests.

comment:13 kucrut7 months ago

  • Cc kucrut.dz@… added
Note: See TracTickets for help on using tickets.