Filter in Wordpress erstellen

Ab und an kommt man nach der Inhaltspflege auf die Idee, a) entweder Textfragmente zu ersetzen oder b) Textfragmente anders zu formatieren. Dies kann - vor allem da Wordpress als CMS immer beliebter wird - schnell zeitlich ziemlich aufwändig werden. Dies über die Datenbank zu machen stellt einen möglichen Weg dar, jedoch kann man Inhaltsfilter programmieren, die dies übernehmen. Das hat den charmanten Vorteil, das die Änderungen ohne den Redakteur vorgenommen werden - leider jedoch den Nachteil, dass diese Änderungen bei jedem Aufruf vorgenommen werden und sich somit neagtiv auf die Performance auswirken können. Wenn man die Vorteile und Nachteile gegenüber gestellt hat, kann man loslegen.

Im folgenden Beispiel legen wir einen Filter an, der ein als einem "®" hochstellt.

Dazu legen wir in der functions.php folgende Funktion an:

	function filter_content() {
		$content = get_the_content();  
		$content = str_replace('<sup>&reg;</sup>','&reg;',$content);  
		$content = str_replace('<sup>®</sup>','®',$content);  		
		$content = str_replace('&reg;','<sup>&reg;</sup>',$content);  
		$content = str_replace('®','<sup>&reg;</sup>',$content);  
		echo $content;  
	}

Jetzt brauchen wir noch den dazugehörigen Hook, den tragen wir ebenfalls in der functions.php ein:
	add_filter('the_content', 'filter_content');

Dieser Filter betrifft jetzt nur den Content, beim Einsatz von wp_nav_menu wird der Filter nicht angewendet. Daher kommt nun ein weiterer Hook zum Einsatz:

	add_filter('wp_nav_menu_items','change_nav_title', 10, 2);

Die Funktion change_nav_title müssen wir nun ebenfalls in der functions.php erstellen:
	function change_nav_title( $nav, $args ) {
               $content = $nav;
                $content = str_replace('<sup>&reg;</sup>','&reg;',$content);  
		$content = str_replace('<sup>®</sup>','®',$content);  	
		$content = str_replace('&reg;','<sup>&reg;</sup>',$content);  
		$content = str_replace('®','<sup>&reg;</sup>',$content);  
	       return $content;
	}

Da die Funktionen sich in ihrer Funktionalität überschneiden räumen wir noch ein wenig auf, sodass am Ende die Logik gekapselt wird. Am Ende erhalten wir folgenden Code in unserer functions.php:
function _replaceText($content, $echo, $args = null )
	$content = str_replace('<sup>&reg;</sup>','&reg;',$content);  
	$content = str_replace('<sup>®</sup>','®',$content);  		
	$content = str_replace('&reg;','<sup>&reg;</sup>',$content);  
	$content = str_replace('®','<sup>&reg;</sup>',$content);  
	
	if( $echo ) {
		echo $content;  
	else {
		return $content; 
	}
}

function filter_content() {
	_replaceText( get_the_content(), true );
}

function change_nav_title( $nav, $args ) {
	_replaceText( $nav, false, $args );
}

add_filter('the_content', 'filter_content');
add_filter('wp_nav_menu_items','change_nav_title', 10, 2);