Come debuggare il "Cron" wp_schedule_event di WordPress
Come posso debuggare i problemi con il Cron di WordPress? So che si attiva quando gli utenti visitano il sito, ma eventuali errori non saranno mostrati a loro, poiché i lavori vengono eseguiti in modo "asincrono". Quindi come posso debuggare gli errori?

Puoi eseguire manualmente WP cron chiamando: http://example.com/wp-cron.php?doing_wp_cron
Se non vuoi che il cron automatico venga eseguito mentre stai eseguendo il debug, aggiungi questo al tuo file /wp-config.php
:
define('DISABLE_WP_CRON', true);
Se ti trovi in un ambiente di sviluppo e vuoi visualizzare le informazioni di debug, chiamandolo manualmente in questo modo ti mostrerà l'output di debug.
In alternativa puoi usare la funzione integrata di PHP error_log per registrare messaggi stringa nel log degli errori per il debug. Dovrai usarla insieme alle impostazioni WP_DEBUG, come menzionato da Rarst.

Il parametro ?doing_wp_cron
è obbligatorio? Vedi il tutorial di configurazione manuale di EasyCron.

Potresti eseguire il debug manualmente, creando un'azione ed eseguendo l'azione Cron all'interno. In questo modo:
add_action( 'init', function() {
if ( ! isset( $_GET['the_cron_test'] ) ) {
return;
}
error_reporting( 1 );
do_action( 'this_is_cron_event_hook' );
die();
} );
E accedendo all'indirizzo del tuo sito web: http://example.com?the_cron_test
Questo dovrebbe mostrarti eventuali errori relativi al task cron.
Ma non ha molto senso farlo manualmente. Potresti utilizzare il plugin Advanced Cron Manager PRO che fa questo per te e salva anche il log e altre statistiche.

Potresti utilizzare il plugin Cron-View. Lì puoi verificare se il tuo job è a) registrato e b) qual è la prossima ora di esecuzione.
Inoltre, potresti aggiungere un intervallo di schedulazione più breve al tuo evento (ad esempio ogni 2 minuti) e testare il tuo metodo più frequentemente su un sistema locale. Usa l'hook del filtro 'cron_schedules' per registrare nuovi intervalli di tempo. Per esempio:
function my_additional_schedules($schedules) {
// intervallo in secondi
$schedules['every2min'] = array('interval' => 2*60, 'display' => 'Ogni due minuti');
return $schedules;
}
add_filter('cron_schedules', 'my_additional_schedules');

Puoi (e probabilmente dovresti farlo in ogni caso, con o senza cron) configurare il log degli errori di PHP per registrare tutti gli errori.
