plugin_slug = BDP_LV_PLUGIN_SLUG; $this->updateUrl = $plugin_data['UpdateURI'] . '/info.json'; $this->version = $plugin_data['Version']; $this->cache_key = 'bdp-kompass-upd'; $this->cache_allowed = false; add_filter( 'plugins_api', array( $this, 'info' ), 20, 3 ); add_filter( 'site_transient_update_plugins', array( $this, 'update' ) ); add_action( 'upgrader_process_complete', array( $this, 'purge' ), 10, 2 ); } public function request(){ $remote = get_transient( $this->cache_key ); if( false === $remote || ! $this->cache_allowed ) { $remote = wp_remote_get( $this->updateUrl , array( 'timeout' => 10, 'headers' => array( 'Accept' => 'application/json' ) ) ); if( is_wp_error( $remote ) || 200 !== wp_remote_retrieve_response_code( $remote ) || empty( wp_remote_retrieve_body( $remote ) ) ) { return false; } set_transient( $this->cache_key, $remote, 3600 ); } $remote = json_decode( wp_remote_retrieve_body( $remote ) ); return $remote; } function info( $res = '', $action = '', $args = '' ) { if (!isset($args->slug) || $args->slug !== $this->plugin_slug) { return $res; } // get updates $remote = $this->request(); if( ! $remote ) { return $res; } $newVersion = $remote->version; $res = new stdClass(); $res->name = $remote->name; $res->slug = $remote->slug; $res->version = $newVersion; $res->tested = $remote->tested; $res->requires = $remote->requires; $res->author = $remote->author; $res->author_profile = $remote->author_profile; $res->download_link = $remote->download_url; $res->trunk = $remote->download_url; $res->requires_php = $remote->requires_php; $res->last_updated = $remote->last_updated; $res->sections = array( 'description' => $remote->sections->description, 'installation' => $remote->sections->installation, 'changelog' => $remote->sections->changelog ); if( ! empty( $remote->banners ) ) { $res->banners = array( 'low' => $remote->banners->low, 'high' => $remote->banners->high ); } return $res; } public function update( $transient ) { if ( empty($transient->checked ) ) { return $transient; } $remote = $this->request(); if( $remote && version_compare( $this->version, $remote->version, '<' ) && version_compare( $remote->requires, get_bloginfo( 'version' ), '<=' ) && version_compare( $remote->requires_php, PHP_VERSION, '<' ) ) { $newVersion = $remote->version; $res = new stdClass(); $res->slug = $this->plugin_slug; $res->plugin = plugin_basename( BDP_LV_STARTUP_FILE ); $res->new_version = $newVersion; $res->tested = $remote->tested; $res->package = $remote->download_url; $transient->response[ $res->plugin ] = $res; } else { $res = new stdClass(); $res->slug = $this->plugin_slug; $res->plugin = plugin_basename( BDP_LV_STARTUP_FILE ); $transient->no_update[ $res->plugin ] = $res; } return $transient; } public function purge( $upgrader, $options ){ if ( $this->cache_allowed && 'update' === $options['action'] && 'plugin' === $options[ 'type' ] ) { // just clean the cache when new plugin version is installed delete_transient( $this->cache_key ); } } }