WordPress.org

Make WordPress Core

Opened 6 years ago

Last modified 12 months ago

#27188 new defect (bug)

deactivated_plugin behaves improperly — at Version 6

Reported by: wpsmith Owned by:
Milestone: Priority: normal
Severity: normal Version: 2.9
Component: Plugins Keywords: has-patch dev-feedback needs-refresh
Focuses: Cc:

Description (last modified by SergeyBiryukov)

Currently, if someone were to hook into deactivated_plugin, one should expect that the $plugin actually be deactivated.

So if, for example, I hook into it with the following code, deactivating Addthis, I don't get the expected behavior.

add_action( 'deactivated_plugin', 'dtat_deactivate_self', 10, 2 );
/**
 *  Deactivate ourself if Premise is deactivated.
 */
function dtat_deactivate_self( $plugin, $network_deactivating ) {
	if ( 'addthis/addthis_social_widget.php' == $plugin ) {
		die( 'Addthis: ' . print_r( is_plugin_active( $plugin ), 1 ) );
	}
}

The plugin still shows that it is active. So if I hook in here to check if plugin has been deactivated, then it fails. Instead, the deactivated_plugin hook should appear after the update_option call, which is where the plugin is actually deactivated.

OR, the docs are wrong and should be updated.

Attached is a sample addthis plugin extension that deactivates after Addthis is deactivated by being forced to use update_option_active_plugins and update_option_active_sitewide_plugins.

See Github Gist sample plugin for Addthis.

Change History (9)

@wpsmith
6 years ago

Option 2: Docs Update

@wpsmith
6 years ago

Option 1 (preferable): move action

#1 @wpsmith
6 years ago

  • Focuses docs administration added

Related #27189.

#2 follow-up: @ocean90
6 years ago

  • Focuses docs administration removed
  • Keywords has-patch added
  • Milestone changed from Awaiting Review to 3.9

Option 1 seems ok. I would also move 'deactivate_' . $plugin and deactivate_plugin together.

#3 @ocean90
6 years ago

Related: #20241

#4 in reply to: ↑ 2 ; follow-up: @wpsmith
6 years ago

Replying to ocean90:

Option 1 seems ok. I would also move 'deactivate_' . $plugin and deactivate_plugin together.

I don't think they should be moved together. The tense of 'deactivate_' . $plugin suggests that it is in the middle of deactivating the current plugin or is not yet complete in the deactivation process. It is where the current plugin being deactivated hooks to run it's deactivating process, function, or method. The later, 'deactivated_plugin', suggests that the plugin has already been deactivated. To me, these are two different steps in the process, even thou a deactivated plugin is only an option in the WordPress database.

@ocean90
6 years ago

#5 in reply to: ↑ 4 @ocean90
6 years ago

Replying to wpsmith:
I'm talking about deactivate_plugin without ed, see 27188.patch.

#6 @SergeyBiryukov
6 years ago

  • Description modified (diff)
  • Summary changed from deactived_plugin behaves improperly to deactivated_plugin behaves improperly
  • Version changed from trunk to 2.9
Note: See TracTickets for help on using tickets.