code in wbmz_cronjob_checks/wbmz_cronjob_checks.php

<?php
/*
Plugin Name: Check Failed Cronjobs
Description: Een plugin om mislukte cronjobs te controleren en een e-mail te sturen naar de beheerder.
Version: 1.0.6
Author: Mitchell Mink
*/

if (!defined('ABSPATH')) {
	exit; // Exit if accessed directly
}

// Laad de plugin instellingen pagina
function wbmz_cronjobs_menu() {
	add_options_page(
		'Check Failed Cronjobs', 
		'Check Failed Cronjobs', 
		'manage_options', 
		'wbmz-check-failed-cronjobs', 
		'wbmz_cronjobs_settings_page'
	);
}
add_action('admin_menu', 'wbmz_cronjobs_menu');

// Instellingen pagina
function wbmz_cronjobs_settings_page() {
	?>
	<div class="wrap">
		<h1>Check Failed Cronjobs</h1>
		<form method="post" action="options.php">
			<?php
			settings_fields('wbmz_cronjobs_options_group');
			do_settings_sections('wbmz-check-failed-cronjobs');
			submit_button();
			?>
		</form>
	</div>
	<?php
}

// Registreer de plugin instellingen
function wbmz_register_cronjobs_settings() {
	register_setting('wbmz_cronjobs_options_group', 'wbmz_cronjobs_email');
	register_setting('wbmz_cronjobs_options_group', 'wbmz_cronjobs_token');
	register_setting('wbmz_cronjobs_options_group', 'wbmz_cronjobs_subject');
	register_setting('wbmz_cronjobs_options_group', 'wbmz_cronjobs_message');

	add_settings_section('wbmz_cronjobs_main_section', 'Instellingen', null, 'wbmz-check-failed-cronjobs');

	add_settings_field('wbmz_cronjobs_email', 'E-mail voor meldingen', 'wbmz_cronjobs_email_callback', 'wbmz-check-failed-cronjobs', 'wbmz_cronjobs_main_section');
	add_settings_field('wbmz_cronjobs_token', 'Veiligheidstoken', 'wbmz_cronjobs_token_callback', 'wbmz-check-failed-cronjobs', 'wbmz_cronjobs_main_section');
	add_settings_field('wbmz_cronjobs_subject', 'E-mail onderwerp', 'wbmz_cronjobs_subject_callback', 'wbmz-check-failed-cronjobs', 'wbmz_cronjobs_main_section');
	add_settings_field('wbmz_cronjobs_message', 'Bericht in de e-mail', 'wbmz_cronjobs_message_callback', 'wbmz-check-failed-cronjobs', 'wbmz_cronjobs_main_section');
}
add_action('admin_init', 'wbmz_register_cronjobs_settings');

// Callback functies voor velden
function wbmz_cronjobs_email_callback() {
	$email = get_option('wbmz_cronjobs_email');
	echo '<input type="email" name="wbmz_cronjobs_email" value="' . esc_attr($email) . '" />';
}

function wbmz_cronjobs_token_callback() {
	$token = get_option('wbmz_cronjobs_token');
	echo '<input type="text" name="wbmz_cronjobs_token" value="' . esc_attr($token) . '" />';
}

function wbmz_cronjobs_subject_callback() {
	$subject = get_option('wbmz_cronjobs_subject');
	echo '<input type="text" name="wbmz_cronjobs_subject" value="' . esc_attr($subject) . '" />';
}

function wbmz_cronjobs_message_callback() {
	$message = get_option('wbmz_cronjobs_message');
	echo '<textarea name="wbmz_cronjobs_message">' . esc_textarea($message) . '</textarea>';
}

// Functie om mislukte cronjobs te controleren
function wbmz_check_failed_cronjobs() {
	if (!isset($_GET['token']) || sanitize_text_field($_GET['token']) !== get_option('wbmz_cronjobs_token')) {
		http_response_code(403);
		exit('Toegang verboden');
	}

	$cron = _get_cron_array();
	if (empty($cron)) {
		return;
	}

	$now = time();
	$failed_cronjobs = [];

	foreach ($cron as $timestamp => $cronhooks) {
		foreach ($cronhooks as $hook => $args) {
			if ($timestamp < $now) {
				$failed_cronjobs[] = [
					'hook' => $hook,
					'scheduled_time' => date('Y-m-d H:i:s', $timestamp),
					'timestamp' => $timestamp,
				];
			}
		}
	}

	if (!empty($failed_cronjobs)) {
		$site_name = get_bloginfo('name');
		$admin_email = get_option('wbmz_cronjobs_email');
		$subject = get_option('wbmz_cronjobs_subject');
		$message = get_option('wbmz_cronjobs_message') . "\n\n";



		foreach ($failed_cronjobs as $failed_cronjob) {
			$message .= "Hook: " . $failed_cronjob['hook'] . "\n";
			$message .= "Geplande tijd: " . $failed_cronjob['scheduled_time'] . "\n\n";
		}

		wp_mail($admin_email, $subject, $message);
	}
}

// Registreer AJAX actie voor niet-ingelogde gebruikers
add_action('wp_ajax_nopriv_wbmz_check_failed_cronjobs', 'wbmz_check_failed_cronjobs');

// Registreer AJAX actie voor ingelogde gebruikers
add_action('wp_ajax_wbmz_check_failed_cronjobs', 'wbmz_check_failed_cronjobs');

Cron job maken

0 * * * * wget -q -O - https://<website>/wp-admin/admin-ajax.php?action=wbmz_check_failed_cronjobs&token=<token> > /dev/null 2>&1
Geef een reactie 0