Wie man eine automatische Anmeldung mit PHP in WordPress durchführt
In meinem kleinen Projekt verwende ich die Plugins „MailPoet“ um Newsletters zu versenden. „Postie“ erledigt das Einstellen von neuen Beiträgen via E-Mail. Beide Plugins werden durch Aktivitäten in der Website getriggert. Dabei genügt es, wenn ein Benutzer sich anmeldet.
Da dies manchmal längere Zeit am Tag nicht passiert, war es mir wichtig, das Triggern automatisch einzurichten. Der Hoster unterstützt keine automatischen Abläufe, daher musste ich, quasi von Außen, eine andere Lösung suchen.
Eine einfache, wenn auch in Details noch „unsaubere“, Lösung war diese hier.
Ich habe einen Benutzer „MyRobot“ als Mitarbeiter in WordPress angelegt.
Auf einem lokalen Web-Server läuft nun im Stunden-Rhythmus das gleich folgende PHP-Script, mit dem mein Server sich auf der Website anmeldet und danach die Kommunikation wieder abbricht. Damit werden die Plugins getriggert und die gewünschte Verarbeitung findet nun statt.
Folgende Hinweise bitte ich zu beachten.
Die wp-login.php ist von meinem Hoster vor solchen „Angriffen“ geschützt, weshalb ein Aufruf dieses Scripts mit „blocked“ quittiert wird.
Die wp-login.php ist ein gerne genommenes Ziel für Brute-Force-Angriffe.
Für mich war daher ein der Eile die Lösung, eine Kopie von wp-login.php zu erstellen (my-robot-login.php). Damit klappt es dann hervorragend.
Folgendes PHP-Script auf der lokalen Maschine speichern und mit der
PHP-Shell ausführen lassen (bei mir läuft dies über einen Command-Scheduler alle 60 Minuten).
<?php $username="MyRobot"; $password="myPassword"; $url="http://www.meineseite.de/"; $postdata = "log=". $username ."&pwd=". $password; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url . "my-robot-login.php"); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ch, CURLOPT_TIMEOUT, 60); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt ($ch, CURLOPT_POST, 1); $result = curl_exec ($ch); curl_close($ch); ?>
Fertig!
So, nun viel Spaß und Erfolg damit.
Verbesserungsvorschläge nehme ich mit Freuden entgegen.