WordPress: Cronjob (wp-cron.php) trotz HTTP-Authentifizierung ausführen
In diesem Beitrag erklären wir euch, wie ihr in WordPress trotz Absicherung durch eine HTTP-Authentifizierung Conjobs ausführen könnt.
WordPress verwendet sog. Cronjobs um bestimmte Aufgaben automatisch durchzuführen. Hierzu zählen unter anderem das Aktualisieren von Themes und Plugins oder das Veröffentlichen von geplanten Beiträgen. Die Cronjobs werden in WordPress immer dann angestoßen, wenn ein Besucher die Website aufruft. Habt ihr eure Website jedoch mit einer HTTP-Authentifizierung abgesichert, werden sie nicht mehr ausgeführt. In diesem Beitrag erklären wir euch, wie ihr Cronjobs in WordPress trotz HTTP-Authentifizierung trotzdem aktivieren könnt.
Was ist eine HTTP-Authentifizierung?
Unter einer HTTP-Authentifizierung versteht man die Absicherung einer Website oder von Teilen einer Website mit Hilfe eines Benutzernamens und eines Passworts. Dies kann zum Beispiel mit Hilfe einer .htaccess
– und einer .htpasswd
-Datei realisiert werden. Einen ausführlichen Beitrag dazu findet ihr hier.
Benutzername und Passwort an WordPress übermitteln
Damit WordPress die gewünschten Cronjobs mit Hilfe der wp-cron.php
ausführen kann, müsst ihr die von euch gewählten Zugangsdaten an WordPress übergeben. Dazu müsst ihr folgendes Snippet in die wp-config.php
schreiben und anstelle von DEIN BENUTZERNAME und DEIN PASSWORT eure Daten eintragen.
if(!defined('WP_CRON_CUSTOM_HTTP_BASIC_USERNAME')) {
define('WP_CRON_CUSTOM_HTTP_BASIC_USERNAME', 'DEIN BENUTZERNAME');
}
if(!defined('WP_CRON_CUSTOM_HTTP_BASIC_PASSWORD')) {
define('WP_CRON_CUSTOM_HTTP_BASIC_PASSWORD', 'DEIN PASSWORT');
}
Cronjobs authentifizieren
Um den Cronjobs nun die Berechtigung zu erteilen automatisierte Aufgaben durchzuführen, müsst ihr die soeben definierten Zugangsdaten auch noch an den Header der Cronjob-Abfrage übergeben. Fügt dazu folgendes Snippet in die functions.php
eures Themes oder in ein seitenspezifisches Plugin ein.
Anschließend sollte eure Website trotz HTTP-Authentifizierung Cronjobs ausführen.
if(defined('WP_CRON_CUSTOM_HTTP_BASIC_USERNAME') && defined('WP_CRON_CUSTOM_HTTP_BASIC_PASSWORD')) {
function kb_http_basic_cron_request($cron_request) {
$headers = array('Authorization' => sprintf('Basic %s', base64_encode(WP_CRON_CUSTOM_HTTP_BASIC_USERNAME . ':' . WP_CRON_CUSTOM_HTTP_BASIC_PASSWORD)));
$cron_request['args']['headers'] = isset($cron_request['args']['headers']) ? array_merge($cron_request['args']['headers'], $headers) : $headers;
return $cron_request;
}
add_filter('cron_request', 'kb_http_basic_cron_request');
}
Hi,
vielen Dank für die Anleitung! Leider kriege ich das Ganze nicht zum Laufen …
Meine Seite läuft auf WP 4.9.8 mit NGINX als Webserver. In der NGINX ist das auth_basic gesetzt. Habe wp-config.php und das functions.php meines Themes entsprechend ergänzt aber das Newsletter-Plugin, das ich nutzen möchte meckert immer noch, es können nicht auf WP-Cron zugreifen.
Hast Du eine Idee?
Grüße,
Bibo