Wenn man genau weiß, was man tut und keine Plug-Ins einsetzen möchte, von denen man nicht immer genau weiß, was sie tun, kann man verschiedene Aufgaben in WordPress von jedem Terminal aus steuern oder anstoßen. In dem Beitrag PuTTY wurde bereits auf den Bereich der Datensicherung eingegangen. Nachfolgend geht es darum die Kommentarfunktion aller aktuell veröffentlichten Posts mit einem Befehl zu deaktivieren bzw. zu schließen; als Notschalter sozusagen. Das Skript in der Windows-Batchdatei, das in dieser Version nur auf das Wesentliche reduziert ist, läuft in drei Schritten ab:
- Es wird eine Protokolldatei erstellt, die den Index und den Namen des Posts aufnimmt, dessen Kommentarfunktion gesperrt werden soll, bzw. gesperrt worden ist. Dies dient dazu den gesamten Vorgang reversibel zu machen. Zudem ist Teil des Dateinamens ein Zeitstempel in der Form JJJJMMTT_HHMMSS. Die Protokolldatei könnte also den Namen closedcomments_20111223_145738.data tragen. Damit wird bei jedem Aufruf des Skripts jeweils eine neue Protokolldatei mit neuem Zeitstempel erstellt. Dies erhöht die Nachvollziehbarkeit. Auf das Thema der fehlenden Null bei Uhrzeiten vor 10 Uhr wird hier nicht eingegangen.
- Im zweiten Schritt wird ein SQL-Query formuliert in dem ID und Post-Name der Posts abgefragt werden, die vom Typ Post sind, den Status Public tragen und deren Kommentarfunktion als Open gekennzeichnet sind. Diese Abfrage wird dann per plink an den Server geschickt. Das Ergebnis der Abfrage wird dann in die Protokolldatei geschrieben.
- Abschließend wird ein SQL-Statement für ein Update der MySQL-Tabelle wp_posts erzeugt und ebenfalls per plink an den Server gesendet.
Die Batch-Datei könnte dabei folgende Struktur haben:
@echo off :: set Nachricht=alle Post-Kommentarfunktionen geschlossen :: :: 1. Sicherungsdatei (closedcomments_jjjjmmtt_hhmmss.data) anlegen :: echo.Sicherungsdatei anlegen ... :: for /f "tokens=1-3 delims=/.- " %%A in ('date /T') do ( set TT=%%A& set MM=%%B& set JJJJ=%%C ) set Datum=%JJJJ%%MM%%TT% for /f "tokens=1-3 delims=:, " %%A in ('echo %time%') do ( set hh=%%A& set mm=%%B& set ss=%%C ) set Uhrzeit=%hh%%mm%%ss% set CC-PROT=closedcomments_%Datum%_%Uhrzeit%.data type NUL > %CC-PROT% if %ERRORLEVEL% gtr 0 ( set Nachricht=Fehler beim Erstellen der Sicherungsdatei ^ & goto batchend) :: :: 2. Servereinwahl :: a. suche offene Post-Kommentarfunktionen :: echo.offene Post-Kommentarfunktionen suchen ... :: set sql= set sql=%sql% select ID, post_name as Name set sql=%sql% from wp_posts set sql=%sql% where post_type = 'post' and set sql=%sql% post_status = 'publish' and set sql=%sql% comment_status = 'open'; c:\"program files (x86)"\putty\plink -ssh -P 22 ^ -l ssh-user -pw ssh-password ^ hostname_oder_ip ^ /usr/bin/mysql -u mysql-user -pmysql-password wordpress-database ^ --execute=\"%sql%\" >> c:\users\user-name\%CC-PROT% if %ERRORLEVEL% gtr 0 ( set Nachricht=Fehler beim Suchen offener Post-Kommentarfunktionen ^ & goto batchend) :: :: b. schließe offene Post-Kommentarfunktionen :: echo.offene Post-Kommentarfunktionen schließen ... :: set sql= set sql=%sql% update wp_posts set comment_status = 'closed' set sql=%sql% where post_type = 'post' and set sql=%sql% post_status = 'publish' and set sql=%sql% comment_status = 'open'; c:\"program files (x86)"\putty\plink -ssh -P 22 ^ -l ssh-user -pw ssh-password ^ hostname_oder_ip ^ /usr/bin/mysql -u mysql-user -pmysql-password wordpress-database ^ --execute=\"%sql%\" if %ERRORLEVEL% gtr 0 ( set Nachricht=Fehler beim Schließen offener Post-Kommentarfunktionen ^ & goto batchend) :batchend echo.%Nachricht%
Das Blockieren der Kommentarfunktion ließe sich auch noch auf bestimmte Autoren oder Kategorien beschränken. Sofern die Protokolldatei verfügbar bleibt, kann der gesamte Vorgang jederzeit wieder rückgängig gemacht werden.
rh2011-12-002