$api_key, 'cmsVersion' => get_bloginfo('version'), 'phpVersion' => PHP_VERSION, 'extensions' => array_merge( $this->get_plugins(), $this->get_themes() ), ]; wp_remote_post(COMMAND_POST_API_URL, [ 'timeout' => 15, 'headers' => ['Content-Type' => 'application/json'], 'body' => wp_json_encode($payload), ]); } private function get_plugins() { if (!function_exists('get_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } if (!function_exists('get_plugin_updates')) { require_once ABSPATH . 'wp-admin/includes/update.php'; } $all_plugins = get_plugins(); $plugin_updates = get_plugin_updates(); $extensions = []; foreach ($all_plugins as $file => $data) { $extensions[] = [ 'type' => 'plugin', 'name' => $data['Name'], 'version' => $data['Version'], 'updateAvailable' => isset($plugin_updates[$file]), 'newVersion' => isset($plugin_updates[$file]) ? $plugin_updates[$file]->update->new_version : null, 'active' => is_plugin_active($file), ]; } return $extensions; } private function get_themes() { if (!function_exists('get_theme_updates')) { require_once ABSPATH . 'wp-admin/includes/update.php'; } $all_themes = wp_get_themes(); $theme_updates = get_theme_updates(); $active = wp_get_theme()->get_stylesheet(); $extensions = []; foreach ($all_themes as $stylesheet => $theme) { $extensions[] = [ 'type' => 'theme', 'name' => $theme->get('Name'), 'version' => $theme->get('Version'), 'updateAvailable' => isset($theme_updates[$stylesheet]), 'newVersion' => isset($theme_updates[$stylesheet]) ? $theme_updates[$stylesheet]->update['new_version'] : null, 'active' => $stylesheet === $active, ]; } return $extensions; } }