Adding support for automatic upgrades to your WordPress plugins is really simple. After you have setup your product in the Downloads section and check enable license creation, there is just a small code snippet and two files that you need to include in your WordPress plugin.
There are three components to the updater:
- The
EDD_SL_Plugin_Updater.php
file. This contains the class that makes the magic happen. - The
extendd-settings.php
handles the settings page. - The code snippet that you place somewhere in your plugin that loads the updater provided by the
EDD_SL_PLugin_Updater.php
class file.
Step 1 – Define the Updater Variables in OOP class
- OOP
-
What ever your class may be, set up some private vars:
class my_custom_plugin_class { var $version; private $plugin_id, $plugin_name;
And set those variables in the constructor or your init function:
function __construct() { $this->version = '1.1.6'; $this->plugin_name = 'Custom Login Pro'; $this->plugin_id = 'wp_custom_login_pro'; // Always prefix the plugin_id with "wp_"!
Step 2 – Include the Classes
The update system itself is contained within the file called EDD_SL_Plugin_Updater.php
and the settings is included in the file extendd-settings.php
. You need to include these files in your main plugin file, like so:
/** * Upgrade script */ function wp_settings() { if ( !class_exists( 'wp_settings_api' ) ) { include( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/extendd-settings.php' ); } add_filter( 'wp_add_settings_sections', array( $this, 'add_settings_section' ) ); add_filter( 'wp_add_settings_fields', array( $this, 'add_settings_fields' ) ); $options = get_option( $this->plugin_id, array() ); if ( isset( $options ) && ( !empty( $options['license_key'] ) && 'valid' === $options['license_active'] ) ) { if ( !class_exists( 'EDD_SL_Plugin_Updater' ) ) { // load our custom updater include( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/EDD_SL_Plugin_Updater.php' ); } $edd_updater = new EDD_SL_Plugin_Updater( 'http://frosty.media/', __FILE__, array( 'version' => $this->version, // current version number 'license' => trim( $options['license_key'] ), // license key 'item_name' => $this->plugin_name, // name of this plugin in the Easy Digital Downloads system 'author' => 'Austin Passy' // author of this plugin ) ); } }
You may need to adjust the file path, depending on where you have decided to place the file within your plugin’s folder structure.
Step 3 – Add the settings sections
Now that the classes are loaded will set up the settings:
/** * Returns new settings section for this plugin * * @updated 3/6/13 * @return array settings fields */ function add_settings_section( $sections ) { $sections[] = array( 'id' => $this->plugin_id, 'title' => $this->plugin_name, //Must match EDD post_title! 'basename' => plugin_basename( __FILE__ ), 'version' => $this->version, ); return $sections; } /** * Returns new settings fields for this plugin * * @return array settings fields */ function add_settings_fields( $settings_fields ) { $settings_fields[$this->plugin_id] = array( array( 'name' => 'license_key', 'label' => __( 'License Key', 'extendd' ), 'desc' => sprintf( __( 'Enter your license for %s to receive automatic updates', '' ), $this->plugin_name ), 'type' => 'text', 'default' => '', 'placeholder' => __( 'Enter your license key', 'extendd' ) ), array( 'name' => 'license_active', 'label' => '', 'desc' => '', 'type' => 'hidden', 'default' => '' ), array( 'name' => 'license_deactivate', 'label' => __( 'De-activate License?', 'extendd' ), 'desc' => '', 'type' => 'checkbox', 'default' => '' ), ); return $settings_fields; }
Everything regarding settings and remote calls is automatically handled by the wp_settings_api class.
There are several parameters we pass to the EDD_SL_Plugin_Updater class:
- $api_url – Always needs to be pointed to Extendd when hosting plugin here.
- $plugin_file – this is the main plugin file. I suggest you use the __FILE__ magic constant provided by PHP. Note, to do this, you must have this snippet placed in your main plugin file.
- $api_args – this is an array of options to pass to the updater:
- version – this is the current version of the plugin that is installed. It is not the latest available version.
- license – this is the license key retrieved from the database.
- item_name – this is the name of our product on Extendd.com
- author – this is the name of the person or company that wrote the plugin (you!)
That’s it! Your plugin should now have a completely functional automatic upgrade system.
The complete code for the updater might look something like this:
class my_custom_plugin_class { var $version; private $plugin_id, $plugin_name; function __construct() { $this->version = '1.1.6'; $this->plugin_name = 'Custom Login Pro'; $this->plugin_id = 'wp_custom_login_pro'; /* Extendd */ $this->wp_settings(); } /** * Upgrade script * * @since 11/30/2012 */ function wp_settings() { if ( !class_exists( 'wp_settings_api' ) ) { include( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/extendd-settings.php' ); } add_filter( 'wp_add_settings_sections', array( $this, 'add_settings_section' ) ); add_filter( 'wp_add_settings_fields', array( $this, 'add_settings_fields' ) ); $options = get_option( $this->plugin_id, array() ); if ( isset( $options ) && ( !empty( $options['license_key'] ) && 'valid' === $options['license_active'] ) ) { if ( !class_exists( 'EDD_SL_Plugin_Updater' ) ) { // load our custom updater include( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'classes/EDD_SL_Plugin_Updater.php' ); } $edd_updater = new EDD_SL_Plugin_Updater( 'http://frosty.media/', __FILE__, array( 'version' => $this->version, // current version number 'license' => trim( $options['license_key'] ), // license key 'item_name' => $this->plugin_name, // name of this download on Extendd 'author' => 'Austin Passy' // author of this plugin ) ); } } /** * Returns new settings section for this plugin * * @updated 3/6/13 * @return array settings fields */ function add_settings_section( $sections ) { $sections[] = array( 'id' => $this->plugin_id, 'title' => $this->plugin_name, //Must match download post_title! 'basename' => plugin_basename( __FILE__ ), 'version' => $this->version, ); return $sections; } /** * Returns new settings fields for this plugin * * @return array settings fields */ function add_settings_fields( $settings_fields ) { $settings_fields[$this->plugin_id] = array( array( 'name' => 'license_key', 'label' => __( 'License Key', '' ), 'desc' => sprintf( __( 'Enter your license for %s to receive automatic updates', '' ), $this->plugin_name ), 'type' => 'text', 'default' => '', 'placeholder' => __( 'Enter your license key', '' ) ), array( 'name' => 'license_active', 'label' => '', 'desc' => '', 'type' => 'hidden', 'default' => '' ), array( 'name' => 'license_deactivate', 'label' => __( 'De-activate License?', 'extendd' ), 'desc' => '', 'type' => 'checkbox', 'default' => '' ), ); return $settings_fields; } }