Hooking WP-Cron into a task scheduling service
Before you start
- Your intention is to enable configure WPO365's capability to synchronize users from Azure AD to WordPress.
- You have installed the WPO365 | SYNC or WPO365 | INTRANET bundle (plus the WPO365 | LOGIN plugin that provides the basic functionality needed for either bundle to operate as expected).
- You completed the steps in this article https://docs.wpo365.com/article/57-synchronize-users-from-azure-ad-to-wordpress and successfully configured WPO365's capability to synchronize users from Azure AD to WordPress.
- You are an Administrator for your WordPress website and have access to your website's files e.g. through a file browser or FTP.
- You have made sure that you have added wp-cron.php to the list of Pages freed from authentication on the plugin's Single Sign-on configuration page.
WP-Cron does not run continuously
The following text is based on this article https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/ found in the WordPress developer plugin handbook.
WP-Cron does not run continuously, which can be an issue if there are critical tasks that must run on time.
User synchronization is a critical task that must run on time because after the first batch of users is processed, the next batch is retrieved using a link that is only valid for short amount of time. If this link expires, user synchronization cannot continue.
There is an easy solution for this. Simply set up [...] a tool to make a web request to the wp-cron.php file [...] that runs on the intervals you desire (or at the specific time needed). The recommended interval is every minute.
Task scheduling services
There are many different options you can choose from that can make a web request and that you can schedule. Two solutions (for Windows and for MacOS / Linux) presented in this article. Alternatively, you can schedule an Azure Function App to executes the following PowerShell command every minute.
Invoke-WebRequest https://YOUR_SITE_URL/wp-cron.php
And last but not least you can purchase a PRO plan from UptimeRobot and configure it to call https://YOUR_SITE_URL/wp-cron.php every minute.
Disable WP-Cron
WordPress will continue to run WP-Cron on each page load. This is no longer necessary and will contribute to extra resource usage on your server. WP-Cron can be disabled in the wp-config.php file. Open the file for editing and add the following line:
define('DISABLE_WP_CRON', true);
Important Only disable WP CRON if you have enabled a service to call https://YOUR_SITE_URL/wp-cron.php at a regular interval as recommended above or else your site's CRON jobs won't be processed at all.