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