Self hosted Auto update Custom WP Plugin or Theme - AKA Personal Wordpress Update Repository code example
Example: Self hosted Auto update Custom WP Plugin or Theme - AKA Personal Wordpress Update Repository
define( 'PREFIX_PLUGIN_VERSION', '1.7' );
###################
# Automatic updates
###################
/**
* Pop-up with details about plugin update visible when there is a new release
*/
function prefix_plugin_info( $res, $action, $args ) {
// do nothing if this is not about getting plugin information
if ($action !== 'plugin_information') {
return false;
}
// do nothing if it is not our plugin
if ('pluginslug' !== $args->slug) {
return $res;
}
// trying to get from cache first, to disable cache comment 23,33,34,35,36
if (false == $remote = get_transient( 'prefix_upgrade_pluginslug' )) {
// info.json is the file with the actual information about plug-in on your server
$remote = wp_remote_get( 'https://www.example.com/foldername/get-info.php?slug=pluginslug&action=info', array(
'timeout' => 10,
'headers' => array(
'Accept' => 'application/json'
))
);
if (!is_wp_error( $remote ) && isset( $remote[ 'response' ][ 'code' ] ) && $remote[ 'response' ][ 'code' ] == 200 && !empty( $remote[ 'body' ] )) {
set_transient( 'prefix_upgrade_pluginslug', $remote, 21600 ); // 6 hours cache
}
}
if (!is_wp_error( $remote )) {
$remote = json_decode( $remote[ 'body' ] );
$res = new stdClass();
$res->name = $remote->name;
$res->slug = $remote->slug;
$res->version = $remote->version;
$res->tested = $remote->tested;
$res->requires = $remote->requires;
$res->author = $remote->author;
$res->author_profile = $remote->author_homepage;
$res->download_link = $remote->download_link;
$res->trunk = $remote->download_link;
$res->last_updated = $remote->last_updated;
$res->sections = array(
'description' => $remote->sections->description, // description tab
'installation' => $remote->sections->installation, // installation tab
// you can add your custom sections (tabs) here like 'changelog'
);
$res->banners = array(
'low' => $remote->banners->low,
'high' => $remote->banners->high,
);
return $res;
}
return false;
}
add_filter( 'plugins_api', 'prefix_plugin_info', 20, 3 );