namespace Elementor\Core\Utils;
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
use WP_Ajax_Upgrader_Skin;
public function __construct( $upgrader = null ) {
$this->upgrader = $upgrader;
$skin = new WP_Ajax_Upgrader_Skin();
$this->upgrader = new Plugin_Upgrader( $skin );
* Install plugin or an array of plugins.
* @param string|array $plugins
* @return array [ 'succeeded' => [] , 'failed' => [] ]
public function install( $plugins ) {
$already_installed_plugins = Plugin::$instance->wp->get_plugins();
if ( ! is_array( $plugins ) ) {
foreach ( $plugins as $plugin ) {
if ( in_array( $plugin, $already_installed_plugins->keys()->all(), true ) ) {
$slug = $this->clean_slug( $plugin );
$api = Plugin::$instance->wp->plugins_api('plugin_information',
'short_description' => false,
'compatibility' => false,
if ( ! isset( $api->download_link ) ) {
$installation = $this->upgrader->install( $api->download_link );
'succeeded' => $succeeded,
* Activate plugin or array off plugins.
* @param array|string $plugins
* @return array [ 'succeeded' => [] , 'failed' => [] ]
public function activate( $plugins ) {
if ( ! is_array( $plugins ) ) {
foreach ( $plugins as $plugin ) {
if ( Plugin::$instance->wp->is_plugin_active( $plugin ) ) {
Plugin::$instance->wp->activate_plugin( $plugin );
if ( Plugin::$instance->wp->is_plugin_active( $plugin ) ) {
'succeeded' => $succeeded,
private function clean_slug( $initial_slug ) {
return explode( '/', $initial_slug )[0];