3

I would like that every time any plugin previously activated, a function from my plugin be called, returning (at least) the name of the plugin, or something that allows to identify it (file name?).

I figured i could use the action hook "deactivated_plugin" but i'm wondering what information from the desactivated plugin is actually available?

1 Answer 1

3

You can hook into the action 'deactivate_plugin' to get the plugin's base name and (as second parameter) if it was deactivated network wide.

See wp-admin/includes/plugin.php function deactivate_plugins().

There seems to be no hook for plugin deletion.

Sample logging code:

add_action( 'activated_plugin', 't5_plugin_logger', 10, 2 );
add_action( 'deactivated_plugin', 't5_plugin_logger', 10, 2 );

/**
 * Log plugin activations and deactivations.
 *
 * @param  string $plugin
 * @param  bool   $network_wide
 * @return void
 */
function t5_plugin_logger( $plugin, $network_wide )
{
    $log_size = 20;
    $log      = get_option( 't5_plugin_log', array () );

    // Remove the oldest entry.
    sizeof( $log ) > $log_size and array_shift( $log );

    $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
    $date_format = get_option( 'date_format' ) . ' · ' . get_option( 'time_format' );

    $log[] = array (
        'user'    => esc_html( wp_get_current_user()->display_name ),
        'plugin'  => $plugin_data['Name'],
        'network' => $network_wide ? '✔' : '',
        'time'    => date( $date_format, time() ),
        'action'  => 'deactivated_plugin' === current_filter() ? 'deactivated' : 'activated'
    );

    update_option( 't5_plugin_log', $log );
}

Now every plugin activation or deactivation will be added to the log option field. You can use this data anywhere. I made a small dashboard widget:

enter image description here

Download as plugin from GitHub: T5 Plugin Log

7
  • thanks for that. I think what i'm trying to do is impossible: i need my function to be called whenever any plugin is deactivated, not just mine.
    – pixeline
    Commented May 26, 2012 at 23:48
  • @pixeline See my update, I have added some sample code.
    – fuxia
    Commented May 27, 2012 at 3:48
  • @toscho wow, amazing. Thank you for putting so much time into this. I'm building a plugin that will take care of plugins but also for themes and WPcore changes. If you are interested, maybe we partner up?
    – pixeline
    Commented May 27, 2012 at 8:23
  • Yeah, would be cool. :) There is also an old plugin Last Edits which I wanted to refresh and extend for … years. Tracking system changes would be enough for a start, I'm also interested in changes to PHP, MySQL and Apache because web hoster do this usually rather silent.
    – fuxia
    Commented May 27, 2012 at 8:30
  • good point. Note that i started writing my plugin as a class. Also, it uses a custom db table for the logging, not the wp option system, because i figured there would be a lot of data at some point.
    – pixeline
    Commented May 27, 2012 at 8:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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