In the last part of this tutorial, we learned how to use the TGM plugin activation class to require the Envato WordPress Toolkit plugin anytime our theme is in use. The plugin allows users to install and update purchased themes in the admin.
The next part will teach you how to implement the Envato WordPress Toolkit library so that we can use the Envato Marketplace API to regularly check when updates are available for our theme.
When an update is available, we will display a notification in the admin and direct users to access the plugin to update.
We first need to include the toolkit library into our project. Download the Envato WordPress Toolkit Library ZIP file. Unzip and copy the folder envato-wordpress-toolkit-library to the inc folder in your theme. You should end up with these paths:
NOTE: You can change the location of the above files to suit your needs. Alternatively, you can download the full source code from the download link at the top of this article.
Now we can start coding. We will hook the admin_init
operation. Add the following code to your functions.php:
/** * Load the Envato WordPress Toolkit Library check for updates * and direct the user to the Toolkit Plugin if there is one */ function envato_toolkit_admin_init() { // Include the Toolkit Library include_once( get_template_directory() . '/inc/envato-wordpress-toolkit-library/class-envato-wordpress-theme-upgrader.php' ); // Add further code here } add_action( 'admin_init', 'envato_toolkit_admin_init' );
The toolkit library requires an Envato username and API key to work. Since we required the Toolkit plugin in the previous tutorial, we can use the input values for the Username and API Key fields found in its settings. If these fields are not filled in, we can display a notification asking the user to enter them in the Toolkit plugin.
// Use credentials used in toolkit plugin so that we don't have to show our own forms anymore $credentials = get_option( 'envato-wordpress-toolkit' ); if ( empty( $credentials['user_name'] ) || empty( $credentials['api_key'] ) ) { add_action( 'admin_notices', 'envato_toolkit_credentials_admin_notices' ); return; }
We need to add the corresponding hook function externally to display our management notifications:
/** * Display a notice in the admin to remind the user to enter their credentials */ function envato_toolkit_credentials_admin_notices() { $message = sprintf( __( "To enable theme update notifications, please enter your Envato Marketplace credentials in the %s", "default" ), "<a href='" . admin_url() . "admin.php?page=envato-wordpress-toolkit'>Envato WordPress Toolkit Plugin</a>" ); echo "<div id='message' class='updated below-h2'><p>{$message}</p></div>"; }
The toolkit library always checks for theme updates using the Envato Marketplace API. This is not good because executing it every time a user visits the admin page will significantly slow down the page load time. We just need to check for updates regularly.
Checking every 3 hours sounds like a good idea:
// Check updates only after a while $lastCheck = get_option( 'toolkit-last-toolkit-check' ); if ( false === $lastCheck ) { update_option( 'toolkit-last-toolkit-check', time() ); return; } // Check for an update every 3 hours if ( 10800 < ( time() - $lastCheck ) ) { return; } // Update the time we last checked update_option( 'toolkit-last-toolkit-check', time() );
Finally, we can use this library to check for updates:
// Check for updates $upgrader = new Envato_WordPress_Theme_Upgrader( $credentials['user_name'], $credentials['api_key'] ); $updates = $upgrader->check_for_theme_update(); // If $updates->updated_themes_count == true then we have an update!
From this moment on, you have the option of automatically updating the theme using the toolkit library function $upgrader->upgrade_theme();
However, I believe it is generally a good idea to give the user a choice.
My suggestion is to only show notifications for theme updates and allow users to update using the Toolkit plugin:
// Add update alert, to update the theme if ( $updates->updated_themes_count ) { add_action( 'admin_notices', 'envato_toolkit_admin_notices' ); }
We need to display the function that displays the notification outside the current function:
/** * Display a notice in the admin that an update is available */ function envato_toolkit_admin_notices() { $message = sprintf( __( "An update to the theme is available! Head over to %s to update it now.", "default" ), "<a href='" . admin_url() . "admin.php?page=envato-wordpress-toolkit'>Envato WordPress Toolkit Plugin</a>" ); echo "<div id='message' class='updated below-h2'><p>{$message}</p></div>"; }
You might think you could also just use the Toolkit library without the Toolkit plugin and then maybe just display our own username and API key form in the theme options.
While this is entirely possible, using this plugin brings us some benefits:
That's it! We have integrated the Envato WordPress Toolkit plugin and library to check for theme updates. Now, our customers will receive an admin notification once an update is available in the market. The best thing we've done is they can easily perform updates without leaving the admin.
You can continue to download the complete source code from the link above the article. The code also covers topics covered in the previous part of this tutorial.
Since this is my first tutorial series, I would really appreciate any feedback, comments, and suggestions. Let me know what you think!
The above is the detailed content of Enhance your theme with the Envato WordPress Toolkit: Library. For more information, please follow other related articles on the PHP Chinese website!