Den WordPress-Output vor der Auslieferung mit tidy vernünftig formatieren zu lassen ist (zumindest in meinem Fall) ein kleiner Aufwand… Ich musste folgendes tun, um dieses Blog als valides und gut lesbares (X)HTML ausgeben zu können.
- Zunächst habe ich mal nach einem PlugIn für WordPress gesucht, und bin letztlich bei diesem gelandet: Christopher Korns WordPress Hack, dass eigentlich nur einen Output Buffer startet und den Buffer mittels bestimmten tidy-Funktionen bereinigt, indem die index.php durch eine neue Version ersetzt wird.
- So weit so gut, die Installation von tidy konnte beginnen… und das hat nun etwas länger gedauert 🙁 Ich brauchte eine PECL tidy-Implementierung, die ich mit
pear install tidy
installieren konnte (vorausgesetzt natürlich man hat PEAR überhaupt installiert). Doch hier gab es dann verschiedene Fehlermeldungen (wie z.B. phpize not found), die ich nach einigem Suchen bei Google lösen konnte, indem ich einige benötigte Pakete inkl. ihrer Abhängigkeiten nachinstallierte:apt-get install php5-dev php5-cgi libtidy-dev tidy
- Nach einem Apache-Neustart kam dann der erste Test der ausgetauschten index.php… und es kam… nichts! Mhh… woran lag das nun? Wohl an unterschiedlichen PHP- und tidy-Versionen des Hack-Autors und mir. Daher habe ich den Hack etwas angepasst und meine index.php sieht nun wie folgt aus.
function wp_clean ($buffer) { $config = array( ... ); return tidy_repair_string($buffer, $config, "UTF-8"); } if ($_GET['feed'] != (feed||rdf||rss||rss2||atom)) { ob_start("wp_clean"); } else { ob_start(); } define('WP_USE_THEMES', true); require('./wp-blog-header.php'); ob_end_flush();
- Das Array in Zeile 4 enthält die Konfiguration für tidy. Eine nette Seite mit möglichen Einstellungen ist diese hier. Meine Konfiguration sieht so aus:
$config = array( 'indent' => TRUE, 'output-xhtml' => TRUE, 'output-xml' => FALSE, 'tidy-mark' => TRUE, 'wrap' => 0, 'wrap-attributes' => FALSE, 'wrap-script-literals' => FALSE, 'tab-size' => 4 , 'indent-spaces' => 4, 'indent-attributes' => FALSE, 'doctype' => 'strict', 'char-encoding' => 'utf8', 'numeric-entities' => FALSE, 'quote-marks' => FALSE, 'quote-nbsp' => TRUE, 'quote-ampersand' => TRUE, 'fix-backslash' => TRUE, 'break-before-br' => FALSE, 'uppercase-tags' => FALSE, 'uppercase-attributes' => FALSE, 'clean' => FALSE, 'logical-emphasis' => TRUE, 'drop-empty-paras' => TRUE, 'drop-font-tags' => FALSE, 'enclose-text' => FALSE, 'enclose-block-text' => FALSE, 'fix-bad-comments' => TRUE, 'add-xml-space' => FALSE, 'vertical-space' => TRUE, );
- ADD: Habe tidy erstmal abgeschaltet, da es mir entweder die Umlaute etc. in kryptischen Zeichen wiedergab oder spezielle Entities wie … (“…”) zerstörte. Aber gut zu wissen, das es prinzipiell funktioniert 🙂 Und WordPress gibt ja per se schon valides (X)HTML aus, das einzige, was tidy schöner machen würde, wäre die Einrückung des Quelltextes…
ich habe es auch versucht. bin aber kläglich gescheitert! alle achtung!
Da hatten wir beide wohl die gleiche Idee… 😉
Mein Ansatz war etwas anders – aber eben auch ein Hack. Ich habe übrigens gerade erst gemerkt, dass es ja ein Problem mit den Feeds gab. Ich habe das allerdings nicht ganz so elegant wie Du gelöst, indem ich die XML-Präamble des Quelltextes verglichen habe. Ich werd’ jetzt aber mal Deine Idee aufgreifen, weil sie viel schöner ist…
Viel Erfolg dabei! Ich habe wie erwähnt (Punkt 5) Tidy wieder ausgeschaltet 😉