插件更新前的任何挂钩-批量更新或单个插件更新

时间:2014-12-08 作者:Babu

任何hook 在插件更新操作之前是否在上可用?我在胡克斯图书馆里搜索过。确切的钩子是什么。在更新插件/主题之前做一些事情。

1 个回复
SO网友:birgire

Here are two untested ideas:

想法#1:

如果要在Plugin_Upgrader 创建类时使用:

$upgrader = new Plugin_Upgrader( ... )
其中,通过以下方式激活升级:

$upgrader->upgrade($plugin);          // for a single plugin upgrade
$upgrader->bulk_upgrade( $plugins );  // for bulk plugins upgrades
然后您可以尝试:

/**
 * 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
        }
    }
}
如果你想更深入地了解Plugin_Upgrader 对象,然后您可以尝试劫持upgrader_pre_install 针对单个升级案例的筛选器:

/**
 * 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;
}
同样,您可以劫持upgrader_clear_destination 批量升级筛选:

/**
 * 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;
}
如果可行,希望您可以根据自己的需要进行调整;-)

结束

相关推荐

必须使用插件自动加载器:如何正确使用get_plugins()?

我的autoloader类负责加载必须使用的插件,这些插件不位于mu-plugins 文件夹要定位它们,我需要使用get_plugins() 作用According to Codex, 该函数接受一个参数:$plugin\\u folder(string)(可选):单个插件文件夹的相对路径。我的文件层次结构如下所示:|-- /mu-plugins | |-- autoload.php // only includes wpmu/autoload.php&#