[resolved] Bug in Subscribe2 ReadyGraph extension makes wp_options cron grow infinitely (4 posts)

  1. tigertech
    Posted 1 year ago #

    The wp_options table "cron" entry was growing ever larger and being rewritten on ever page view for a customer's site we host. The entries were all for "rg_cron_hook".

    This is because Subscribe2's readygraph-extension.php contains a bug at lines 108-110 in version 10.11:

    if ($send_blog_updates == 'true'){
    if( !wp_next_scheduled( 'rg_cron_hook' && $send_blog_updates == 'true')) {
       wp_schedule_event( time(), 'weekly', 'rg_cron_hook' );

    The "$send_blog_updates == 'true'" of the second line duplicates the first, and the duplication contains a bug anyway because one of the closing parentheses is in the wrong place. It should look like this if it was trying to separately test whether wp_next_scheduled is FALSE and $send_blog_updates is true:

    if( !wp_next_scheduled( 'rg_cron_hook') && $send_blog_updates == 'true') {

    The misplaced parenthesis causes the wp_schedule_event() to run even when there's already an event scheduled, resulting in a new event being added for every page view. And it turns out that WordPress does not deal well with tens of thousands of scheduled events.

    This is presumably what these lines should look like:

    if ($send_blog_updates == 'true'){
    if( !wp_next_scheduled( 'rg_cron_hook')) {
       wp_schedule_event( time(), 'weekly', 'rg_cron_hook' );


  2. tanaylakhani
    Plugin Author

    Posted 1 year ago #


    thank you for reporting the bug. noted and committed to current version.

  3. tigertech
    Posted 1 year ago #


    You should release a new version now; this bug completely kills people's WordPress sites when the number of scheduled tasks builds up to high numbers. The constant database rewrites of the wp_options "cron" value was causing several GB of database writes per hour on a site we saw.

  4. mattyrob
    Posted 1 year ago #

    I've just encountered a site with over 7,400 duplicate 'rg_cron_hook' events that were essentially disabling the WordPress cron system on the site such that update checks for core, plugins and themes any any other WP cron jobs were not working.

    To remove all of the duplicates I used this snippets of code repeatedly so as not to hang the site trying to delete all of these at the same time:

    for( $i=0; $i<250; $i++ ) {
    	$timestamp = wp_next_scheduled( 'rg_cron_hook' );
    	if ( false !== $timestamp ) {
    		wp_unschedule_event( $timestamp, 'rg_cron_hook');

    It erases these in lots of 250.

    To check if you have duplicates use this:

    global $wpdb;
    $crons = $wpdb->get_results( "SELECT * FROM $wpdb->options WHERE option_value LIKE '%rg_cron_hook%'" );
    var_dump( $crons );

    Push this to a browser window and then search in the browser for 'rg_cron_hook' to see how may you have.

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic


No tags yet.