N'importe quel crochet est disponible avant l'action de mise à jour du plugin? J'ai cherché dans la bibliothèque de crochets. Quel est le crochet exact? . Faire des choses avant de mettre à jour le plugin/thème.
Voici deux idées non testées:
Si vous voulez accrocher avant qu'une instance de la classe Plugin_Upgrader
soit créée avec:
$upgrader = new Plugin_Upgrader( ... )
où les mises à jour sont activées avec:
$upgrader->upgrade($plugin); // for a single plugin upgrade
$upgrader->bulk_upgrade( $plugins ); // for bulk plugins upgrades
alors vous pourriez essayer:
/**
* Idea #1 - Prior to plugin (bulk or single) upgrades
*/
add_action( 'admin_action_upgrade-plugin', function() {
add_action( 'check_admin_referer', 'wpse_referer', 10, 2 );
});
add_action( 'admin_action_bulk-update-plugins', function() {
add_action( 'check_admin_referer', 'wpse_referer', 10, 2 );
});
function wpse_referer( $action, $result )
{
remove_action( current_filter(), __FUNCTION__, 10 );
if( $result )
{
if( 'bulk-update-plugins' === $action )
{
// Do stuff before we run the bulk upgrade
}
elseif( 'upgrade-plugin_' === substr( $action, 0, 15 ) )
{
// Do stuff before we run the single plugin upgrade
}
}
}
Si vous souhaitez approfondir l'objet Plugin_Upgrader
, vous pouvez par exemple essayer de détourner le filtre upgrader_pre_install
pour le cas de mise à niveau simple :
/**
* Idea #2 - Prior to a single plugin upgrade
*/
add_action( 'admin_action_upgrade-plugin', function() {
add_action( 'upgrader_pre_install', 'wpse_upgrader_pre_install', 99, 2 );
});
function wpse_upgrader_pre_install( $return, $plugin )
{
if ( ! is_wp_error( $return ) )
{
// Do stuff before we run the single plugin upgrade
}
remove_action( current_filter(), __FUNCTION__, 99 );
return $return;
}
De même, vous pouvez pirater le filtre upgrader_clear_destination
pour les mises à niveau en masse :
/**
* Idea #2 - Prior to bulk plugins upgrade
*/
add_action( 'admin_action_bulk-update-plugins', function() {
add_action( 'upgrader_clear_destination', 'wpse_upgrader_clear_destination', 99, 4 );
});
function wpse_upgrader_clear_destination( $removed, $local_destination,
$remote_destination, $plugin )
{
if ( ! is_wp_error( $removed ) )
{
// Do stuff before we run the bulk plugins upgrades
}
remove_action( current_filter(), __FUNCTION__, 99 );
return $removed;
}
J'espère que vous pourrez adapter cela à vos besoins, si cela fonctionne ;-)