WordPress: Erweiterung für Code-Highlighter – Code in Textdatei kopieren

Wenn der Code den Rahmen sprengt.

Mit meinem neuen WordPress-Theme tat sich ein gewisses Problem bei der Darstellung von Quelltext auf: Die Content-Spalte war zu schmal um Code mit einer höheren Zeilenlänge vollständig anzuzeigen. Das Element daraufhin horizontal scrollbar zu machen war mir zu blöd...

Eine andere Lösung musste her!

Kurzum entschied ich mich, die überstehenden Zeilen mit der CSS-Regel overflow:hidden abzutrennen. Rein visuell war ich von dem Ergebnis überzeugt. Doch irgendwie musste ich den kompletten Code wieder frei zugänglich machen.

Warum das Rad neu erfinden?

Mir kam die Idee das WordPress-Plugin Code-Highlighter zu erweitern. Das Ergebnis ist eine Funktion die den Code ausliest, formatiert und - wenn nicht bereits vorhanden - als Textdatei speichert. Der Dateiname wird generiert aus dem md5-Hash des Code. Bereits vorhandene Dateien die aktuellen Code besitzen müssen so nicht erneut erstellt werden.

Der Code

Einfach in die functions.php in eurem Theme-Ordner kopieren und die Pfade anpassen.

<?php
function filter_codeplaintext_callback($matches) {
	$code = html_entity_decode(trim(strip_tags($matches[5]), '\r\n'));
	$hash = md5($code);
	$dir = DOC_ROOT."wordpress/wp-content/themes/since1985/media/text/code/";
	$file = $dir.$hash.".txt";
 
	!file_exists($file) ? file_put_contents($file, $code) : NULL;
 
	$url = get_bloginfo('url')."/wordpress/wp-content/themes/since1985/media/text/code/".$hash.".txt";
 
	return $matches[0]."
<ul>
<li><a href='".$url."'>Als Textdatei anzeigen</a></li>
</ul>
 
";
}
 
function filter_codeplaintext($content) {
	$pattern = '/
<pre(\s*class="([^"]*)")?(\s*lineno="([^"]*)")?>((\\n|.)*)<\/pre>/U';
	$content = preg_replace_callback($pattern, 'filter_codeplaintext_callback', $content);
	return $content;
}
 
add_filter('the_content', 'filter_codeplaintext');
?>
Als Textdatei öffnen | since1985de_fbfc25e6.txt | 851 Byte

28. November 2009