Einige kleine Änderungen am Design hier sind jetzt soweit durch: Insgesamt eine größere Schrift, die Header-Navigation ist ein bisschen weniger “eckig” als vorher - und der Logo-Bereich ist etwas “plastischer” geworden.

Ich hoffe, es gefällt. :-)

Eventuell gibt’s hier und da noch einige Anzeige-Fehler, aber erstens ist das neue Theme noch nicht 100%ig fertig - und zweitens bestehen noch ein paar “Merkwürdigkeiten” seit dem Upgrade auf Wordpress 2.1.

wpautop();

Nanu? Lauter Fehler? Der Filter wpautop() scheint anders zu arbeiten als früher. Aus beispielsweise ursprünglich

<div class="Abbildung"><img src="blablabla" /></div>

wurde

<div class="Abbildung"><p><img src="blablabla" /></div>

… hinter etlichen </div>-Tags stand in der HTML-Ausgabe plötzlich ein </p> die Ausgabe verschiedener Kontaktformular-PlugIns war auf einmal mit Absätzen und Zeilenumbrüchen durchsetzt und so weiter …! Was tun, wenn man nicht alle möglichen Seiten etc. neu schreiben möchte?

Alte Formatierungs-Regeln

Ich hab mir also die Funktion wpautop() aus Wordpress 1.52 kopiert und in ein eigenes “Mini-PlugIn” geschrieben


<?php
/*
Plugin Name: wpautopOld
Plugin URI: http://www.gunnart.de/?p=222
Description: Replaces the new wpautop-Function with the old wpautop-Function
Author: Wordpress 1.52
Author URI: http://www.gunnart.de
Version: 0.1
*/

function wpautopOld($pee, $br = 1) { // Taken from Wordpress 1.52
	$pee = $pee . "\n"; // just to make things a little easier, pad the end
	$pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
	// Space things out a little
	$pee = preg_replace('!(<(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "\n$1", $pee);
	$pee = preg_replace('!(</(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])>)!', "$1\n", $pee);
	$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
	$pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
	$pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "\t<p>$1</p>\n", $pee); // make paragraphs, including one at the end
	$pee = preg_replace('|<p>\s*?</p>|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace
    $pee = preg_replace('!<p>\s*(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|hr|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*</p>!', "$1", $pee); // don't pee all over a tag
	$pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
	$pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
	$pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
	$pee = preg_replace('!<p>\s*(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|hr|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "$1", $pee);
	$pee = preg_replace('!(</?(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*</p>!', "$1", $pee);
	if ($br) $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
	$pee = preg_replace('!(</?(?:table|thead|tfoot|caption|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)\s*<br />!', "$1", $pee);
	$pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)!', '$1', $pee);
	$pee = preg_replace('!(<pre.*?>)(.*?)</pre>!ise', " stripslashes('$1') .  clean_pre('$2')  . '</pre>' ", $pee);

	return $pee;
}

remove_filter('the_content', 'wpautop');
add_filter('the_content', 'wpautopOld');
?>

 

WYSI …WTF?!

Nach dem Aktivieren dieses “Mini-PlugIns” waren die meisten Ausgabe-Probleme behoben. Aber wenn man schon updatet, möchte man auch ein bisschen mehr Komfort beim Schreiben von Blog-Beiträgen.

Nur der eingebaute WYSIWYG-Editor macht irgendwie merkwürdige Sachen. Aus bereits bestehenden Seiten mit Code à la

<div class="Abbildung"><img src="blablabla" /></div>
<div class="Text">
<h4>Text</h4>
<p>Blablabla</p>
</div>

… macht die Code-Ansicht vom Editor

<p class="Abbildung">
<img src="blablabla" />

<p class="Text">
<h4>Text</h4>
Blablabla

… Aber damit nicht genug - schaltet man ein weiteres Mal zwischen Code- und Visueller Ansicht hin und her, bleibt nur noch das hier übrig:

<p class="Abbildung">
<img src="blablabla" />

<h4>Text</h4>
Blablabla

… und wenn man nur oft genug hin- und her schaltet, verschwindet nach und nach so beinahe alles an eigenem Code. Bis nur noch die Fehler übrig bleiben.

 

Okay, also weiterhin kein WYSIWYG-Editor für mich. Zumindest nicht den eingebauten. Ich bin am Überlegen, ob ich nicht auch bei mir den “Xinha4WP”-Editor installieren soll. Der ist zwar auch nicht ganz XHTML-Strict, macht aber erheblich weniger Faxen - Nur dann könnte es eventuell weitere Probleme mit der HTML-Ausgabe bereits bestehender Beiträge geben …

… Um dann nicht alle Beiträge und Seiten überarbeiten zu müssen, wird wohl das PlugIn “Text-Control” einsetzen - und ein bisschen bearbeiten, denn unter Wordpress 2.1 stellt Text-Control leider nicht bei jedem Beitrag und jeder Seite ein Dropdown zur Verfügung, mit dem man sich die gewünschte Formatierung aussuchen kann … und außerdem kennt Text-Control ja “meinen” neuen Filter “wpautopOld()” noch nicht.

Derlei Experimente sind dann aber wieder ein Fall für meine Test-Seite.