MONTH_IN_SECONDS, 'display' => __( 'Once every month' ) ); $schedules['cmplz_weekly'] = array( 'interval' => WEEK_IN_SECONDS, 'display' => __( 'Once every week' ) ); $schedules['cmplz_daily'] = array( 'interval' => DAY_IN_SECONDS, 'display' => __( 'Once every day' ) ); $schedules['cmplz_five_minutes'] = array( 'interval' => 5 * MINUTE_IN_SECONDS, 'display' => __( 'Once every five minutes' ) ); return $schedules; } register_deactivation_hook( __FILE__, 'cmplz_clear_scheduled_hooks' ); function cmplz_clear_scheduled_hooks() { wp_clear_scheduled_hook( 'cmplz_every_month_hook' ); wp_clear_scheduled_hook( 'cmplz_every_week_hook' ); wp_clear_scheduled_hook( 'cmplz_every_day_hook' ); } /** * Clean placeholders directory periodically */ function cmplz_cron_clean_placeholders() { require_once( ABSPATH . 'wp-admin/includes/file.php' ); $dirname = cmplz_upload_dir("placeholders"); array_map( 'unlink', glob( "$dirname/*.*" ) ); } /** * Actively remove expired entries from the cmplz_transients option. * Runs daily to prevent the option from growing unboundedly. * Also deletes any placeholder image files whose transient has expired. */ function cmplz_clean_expired_transients(): void { $transients = get_option( 'cmplz_transients', array() ); if ( ! is_array( $transients ) || empty( $transients ) ) { return; } $now = time(); $changed = false; foreach ( $transients as $name => $data ) { $expires = isset( $data['expires'] ) ? (int) $data['expires'] : 0; if ( $expires > 0 && $expires <= $now ) { $value = $data['value'] ?? false; if ( is_string( $value ) && cmplz_file_exists_on_url( $value ) ) { wp_delete_file( str_replace( cmplz_upload_url(), cmplz_upload_dir(), $value ) ); } unset( $transients[ $name ] ); $changed = true; } } if ( $changed ) { update_option( 'cmplz_transients', $transients, false ); } }