Custom Plugin Autoupdate code example
Once the variables / constants are defined, as described on Custom Plugin integration with API calls a new variable constant is required, which is the current plugin code version. This will be compared with the version exists on the server, if there is a newer one, a data set is returned accordingly, otherwise a FALSE response will be output.
define('APTO_VERSION', '1.4.2');
A plugin auto-update code can be inserted within the plugin, here is an example:
class My_CodeAutoUpdate { # URL to check for updates, this is where the index.php script goes public $api_url; # Type of package to be updated public $package_type; public $code_slug; public $plugin_file; public $current_version; public function My_CodeAutoUpdate($api_url, $slug) { $this->api_url = $api_url; $this->package_type = 'stable'; $this->code_slug = $slug; $this->plugin_file = $slug .'/'. $slug . '.php'; $this->current_version = APTO_VERSION; } public function check_for_plugin_update($checked_data) { if (empty($checked_data->checked)) return $checked_data; $request_args = array( 'slug' => $this->code_slug, 'version' => $checked_data->checked[$this->plugin_file], 'package_type' => $this->package_type, ); $request_string = $this->prepare_request('basic_check', $request_args); if($request_string === FALSE) return $checked_data; // Start checking for an update $request_uri = $this->api_url . '?' . http_build_query( $request_string ); $data = wp_remote_get( $request_uri ); if(is_wp_error( $data ) || $data['response']['code'] != 200) return $checked_data; $response = unserialize($data['body']); if (is_object($response) && !empty($response)) // Feed the update data into WP updater $checked_data->response[$this->plugin_file] = $response; return $checked_data; } public function plugins_api_call($def, $action, $args) { if (!is_object($args) || !isset($args->slug) || $args->slug != $this->code_slug) return false; $args->version = $this->current_version; $args->package_type = $this->package_type; $request_string = $this->prepare_request($action, $args); if($request_string === FALSE) return new WP_Error('plugins_api_failed', __('An error occour when try to identify the pluguin.</p> <p><a href="?" onclick="document.location.reload(); return false;">Try again</a>'), $request->get_error_message());; $request_uri = $this->api_url . '?' . http_build_query( $request_string ); $data = wp_remote_get( $request_uri ); if(is_wp_error( $data ) || $data['response']['code'] != 200) $res = new WP_Error('plugins_api_failed', __('An Unexpected HTTP Error occurred during the API request.</p> <p><a href="?" onclick="document.location.reload(); return false;">Try again</a>'), $request->get_error_message()); $res = unserialize($data['body']); if ($res === false) $res = new WP_Error('plugins_api_failed', __('An unknown error occurred'), $request['body']); return $res; } public function prepare_request($action, $args) { global $wp_version; $wp_info = array( 'site-url' => site_url(), 'version' => $wp_version, ); $slug = (is_object($args) && isset($args->slug)) ? $args->slug : $args['slug']; $version = (is_object($args) && isset($args->version)) ? $args->version : $args['version']; $license_data = get_site_option('apto_license'); return array( 'sl_action' => $action, 'slug' => $slug, 'version' => APTO_VERSION, 'request' => serialize($args), 'product_id' => APTO_PRODUCT_ID, 'licence_key' => LICENSE_KEY, 'secret_key' => APTO_SECRET_KEY, 'wp-version' => $wp_version, 'domain' => APTO_INSTANCE ); } } function My_run_updater() { $wp_plugin_auto_update = new My_CodeAutoUpdate(APTO_APP_API_URL, APTO_SLUG); // Take over the update check add_filter('pre_set_site_transient_update_plugins', array($wp_plugin_auto_update, 'check_for_plugin_update')); // Take over the Plugin info screen add_filter('plugins_api', array($wp_plugin_auto_update, 'plugins_api_call'), 10, 3); } add_action( 'after_setup_theme', 'My_run_updater' );