WordPress mit tidy

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.

  1. 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.
  2. 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
  3. 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();
  4. 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, );
  5. 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…

Über Stefan

Polyglot Clean Code Developer

3 Kommentare

  1. ich habe es auch versucht. bin aber kläglich gescheitert! alle achtung!

  2. 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…

  3. Viel Erfolg dabei! Ich habe wie erwähnt (Punkt 5) Tidy wieder ausgeschaltet 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax