web-dev-qa-db-ja.com

Pre-plugin-updateのためのクイック - 一括したはひとつのプラグインの更新

プラグイン更新アクションの前に、任意のフックが使用可能ですか?私はフックライブラリを検索しました。正確なフックは何ですか? 。プラグイン/テーマを更新する前に何かすること。

1
Babu

これは未検証のアイデアが2つあります。

アイデア#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
        }
    }
}

アイデア#2:

もし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;
}

うまくいけば、あなたはあなたのニーズに合わせてこれを調整することができます;-)

1
birgire