Cron-Jobs in WordPress sind auch so eine Sache für sich. An sich ganz schön praktisch, automatisiert Funktionen ablaufen zu lassen (wenn WordPress natürlich entsprechend aufgerufen wird). Für mich als Entwicklerin aber auch manchmal zum Haare raufen, gerade wenn die vom Cron-Job aufgerufene Funktion nicht so ganz das zu tun scheint, was sie eigentlich sollte.
Also fängt man an zu suchen. Läuft der Cron-Job überhaupt richtig oder klemmt das System irgendwo? Dabei helfen Plugins wie WP Crontrol, um die im WordPress registrieren Cron-Jobs im Backend anzeigen zu lassen. Jetzt kann man zumindest schon mal sehen, ob der Cron-Job richtig eingerichtet ist und prinzipiell auch angestoßen werden kann. Aber was ist, wenn sich scheinbar immer noch nichts zu verändern scheint, wenn der Cron-Job die Funktion angestoßen?
Eigentlich ist die Lösung zu dieser Fragestellung fast schon zu simpel, aber ich selbst bin nicht drauf gekommen. Natürlich kann man den Funktions-Aufruf irgendwo im Plugin einbauen und einfach mal Cmd+R / F5 drücken. Wenn man die Funktion aber ganz separiert vom restlichen WordPress betrachten und debuggen möchte, hilft folgendes Snippet:
add_action( 'init', function() { if ( ! isset( $_GET['the_cron_test'] ) ) { return; } error_reporting( 1 ); do_action( 'this_is_cron_event_hook' ); die(); } );
Gefunden habe ich das bei StackOverflow als letzten Kommentar zu diesem Beitrag. Im Plugin füge ich dieses Snippet hinzu und passe den Funktionsaufruf innerhalb der do_action()
Funktion an. Dann kann ich die gewünschte Funktion über die URL https://beispiel.com?the_cron_test
aufrufen. Der Parameter ist natürlich auch im Snippet anpassbar.
Man muss dabei natürlich nur aufpassen, dass man da keine Funktion auslöst, die z. B. bei jedem Aufruf E-Mails an irgendwen verschickt. Außer man hat natürlich so ein Tool wie Mailhog installiert, mit dem solche E-Mails lokal abgefangen werden können. Das Snippet ist definitiv nicht auf Staging- und Produktivseiten zu empfehlen. 😬 Wenn man fertig ist mit debuggen und den/die Fehler gefunden hat, sollte man das Snippet natürlich wieder entfernen.
2 Antworten auf „Cron-Jobs in WordPress: Funktion debuggen“
Das ist wirklich clever! Ich habe oft einfach den Cron im jedem Request gefeuert, aber das war nicht wirklich optimal. Beim Ausführen über die WP-CLI kann man auch nicht jeden Fehler finden. Aber mit diesem Snippet sieht das echt zu einfach aus 🙈 Vielen Dank dafür!
Praktisches Snippet.
Wenn man es so liest, ist es eigentlich vollkommen klar, aber man muss eben drauf kommen 😅
Vielen Dank für’s Teilen.