The first part of the code consist of few constants definition which are being used later within the code.
//the url where the WooCommerce Software License plugin is being installed
define('SL_APP_API_URL', 'http://YourDomainWhereSoftwareManagement.com/index.php');
//the Software Unique ID as defined within product admin page
define('SL_PRODUCT_ID', 'APTO');
//A code variable constant is required, which is the user application code version. This will be used by API to compare against the new version on shop server.
define('SL_VERSION', '1.4.2');
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
define('SL_INSTANCE', str_replace($protocol, "", get_bloginfo('wpurl')));
A plugin auto-update code can be inserted within the plugin, here is an example:
class WOOSL_CodeAutoUpdate
{
// URL to check for updates, this is where the index.php script goes
public $api_url;
private $slug;
public $plugin;
private $API_VERSION;
function __construct($api_url, $slug, $plugin)
{
$this->api_url = $api_url;
$this->slug = $slug;
$this->plugin = $plugin;
//use laets available API
$this->API_VERSION = 1.1;
}
public function check_for_plugin_update($checked_data)
{
if ( !is_object( $checked_data ) || ! isset ( $checked_data->response ) )
return $checked_data;
$request_string = $this->prepare_request('plugin_update');
if($request_string === FALSE)
return $checked_data;
global $wp_version;
// Start checking for an update
$request_uri = $this->api_url . '?' . http_build_query( $request_string , '', '&');
//check if cached
$data = get_site_transient( 'my-custom-plugin-check_for_plugin_update_' . md5( $request_uri ) );
if ( $data === FALSE )
{
$data = wp_remote_get( $request_uri, array(
'timeout' => 20,
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ),
) );
if(is_wp_error( $data ) || $data['response']['code'] != 200)
return $checked_data;
set_site_transient( 'my-custom-plugin-check_for_plugin_update_' . md5( $request_uri ), $data, 60 * 60 * 4 );
}
$response_block = json_decode( wp_remote_retrieve_body( $data ) );
if(!is_array($response_block) || count($response_block) < 1)
return $checked_data;
//retrieve the last message within the $response_block
$response_block = $response_block[count($response_block) - 1];
$response = $this->postprocess_response( $response_block );
if ( $response )
{
//update any licensing data
if ( $refresh )
{
if ( isset ( $response_block->licence_status ) )
$this->licence['licence_status'] = $response_block->licence_status;
if ( isset ( $response_block->licence_expire ) )
$this->licence['licence_expire'] = $response_block->licence_expire;
else
$this->licence['licence_expire'] = '';
WooGC_licence::update_licence_data( $this->licence );
}
if ( ! isset ( $response->new_version ) )
return $checked_data;
//check if the returned version is higher
if ( isset ( $response->new_version ) && version_compare( $response->new_version, WOOGC_VERSION, '<' ) )
return $checked_data;
$checked_data->response[$this->plugin] = $response;
}
return $checked_data;
}
public function plugins_api_call($def, $action, $args)
{
if (!is_object($args) || !isset($args->slug) || $args->slug != $this->slug)
return $def;
$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.' , 'woo-global-cart') . '</p> <p><a href="?" onclick="document.location.reload(); return false;">'. __( 'Try again', 'woo-global-cart' ) .'</a>');;
global $wp_version;
$request_uri = $this->api_url . '?' . http_build_query( $request_string , '', '&');
$data = wp_remote_get( $request_uri, array(
'timeout' => 20,
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ),
) );
if(is_wp_error( $data ) || $data['response']['code'] != 200)
return new WP_Error('plugins_api_failed', __('An Unexpected HTTP Error occurred during the API request.' , 'woo-global-cart') . '</p> <p><a href="?" onclick="document.location.reload(); return false;">'. __( 'Try again', 'woo-global-cart' ) .'</a>', $data->get_error_message());
$response_block = json_decode( wp_remote_retrieve_body( $data ) );
if( ! is_array($response_block) || count( $response_block ) < 1 )
return $def;
//retrieve the last message within the $response_block
$response_block = $response_block[ count( $response_block ) - 1 ];
$response = $this->postprocess_response( $response_block );
if ( $response )
return $response;
}
public function prepare_request($action, $args = array())
{
global $wp_version;
return array(
'woo_sl_action' => $action,
'version' => SL_VERSION,
'product_unique_id' => SL_PRODUCT_ID,
'licence_key' => LICENSE_KEY,
'domain' => SL_INSTANCE,
'wp-version' => $wp_version,
'api_version' => $this->API_VERSION
);
}
private function postprocess_response( $response_block )
{
$response = isset( $response_block->update_data ) ? $response_block->update_data : '';
if ( is_object( $response ) && ! empty ( $response ) )
{
//include slug and plugin data
$response->slug = $this->slug;
$response->plugin = $this->plugin;
//if sections are being set
if ( isset ( $response->sections ) )
$response->sections = (array)$response->sections;
//if banners are being set
if ( isset ( $response->banners ) )
$response->banners = (array)$response->banners;
//if icons being set, convert to array
if ( isset ( $response->icons ) )
$response->icons = (array)$response->icons;
return $response;
}
return FALSE;
}
}
function WOOSL_run_updater()
{
$wp_plugin_auto_update = new WOOSL_CodeAutoUpdate(SL_APP_API_URL, 'plugin-slug', 'plugin-folder/plugin-filename.php');
// 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', 'WOOSL_run_updater');
I’d like to change the title of the Make Sticky icon in the Manual form. I’ve been able to do it using jQuery but then the functionality doesn’t work – posts remain the same order. Any suggestions. I’d like it to say Set Fixed Position.
I think you posted this in wrong post? This is for WooCommerce Software Licence – WordPress Plugin autoupdate API integration code example
Sorry. Will find where to post. Thanks!
Hi !
I followed the steps but it shows an error when click in “update”: No se ha podido descomprimir el paquete. PCLZIP_ERR_BAD_FORMAT (-10) : Unable to find End of Central Dir Record signature
Other plugins I can update.
Ok, I understand. It works when the user is login. mmmmmm….
This is actually your WooCommerce a setting, see WooCommerce > Settings > Products > Downloadable products > Downloads require login -> ensur this is turned off (unchecked)