Wer WordPress verwendet und in Artikeln oder Seiten teilweise viel eigenen HTML Code verwendet, dürfte das Problem kennen. WordPress legt manchmal P-Tags um Code Passagen bei denen es einfach nur sinnlos ist und HTML-Fehler verursacht. Dies liegt an der Funktion wpautop, die dafür da ist automatisch P-Tags um Absätze zu legen.
Ich selber habe dieses Problem zum Beispiel immer bei den Vimeo Codes auf dieser Webseite. Um dieses Problem zu umgehen habe ich mir eine kleine aber feine Lösung überlegt. Ich deaktiviere die wpautop Funktion (bzw. entferne den Filter von the_content). Dies macht bei mir Sinn, da ich den meisten HTML-Code selber schreibe und die P-Tags nicht gebrauchen kann.
Wenn ich sie wieder erwarten doch einmal in einem Artikel verwenden möchte, so kann ich sie über die „Benutzerdefinierten Felder“ wieder aktivieren. Diese Möglichkeit ist sehr komfortabel und ermöglicht mir eine weitere Verwendung der Funktion ohne diese komplett abzuschalten.
Als erstes kommt der Part in dem wir die Funktion wpautop komplett entfernen, sämtlichen Code schreiben wir in die „functions.php“ eures Templates, sollte diese noch nicht existieren so legt diese Datei im Template Ordner an:
remove_filter('the_content', 'wpautop'); |
Mit diesem Code entfernen wir die wpautop Funktion von der the_content() Ausgabe. Mit dieser Zeile wäre wpautop erst einmal komplett deaktiviert. Da wir es später aber über die „Benutzerdefinierten Felder“ wieder aktivieren möchten, schreibt ihr noch folgenden Code darunter:
Du möchtest noch mehr über WordPress erfahren und lernen? Dann schau dir doch einmal mein achtstündiges WordPress-Video-Training an. Es behandelt die verschiedensten Themen rund um WordPress praxisnah und gut verständlich, wie z.B. Theme-Erstellung, MultiSite / Blognetzwerk, eigene Plugins, Custom-Post-Types, Suchmaschinenoptimierung und vieles mehr: WordPress-Video-Training von Pascal Bajorat
function set_wpautop($content){ // $post Variable in der Funktion verfügbar machen global $post; // In die Variable $wpautop wird das "Benutzerdefinierte Feld" mit dem Namen "wpautop" geladen $wpautop = get_post_meta($post->ID, 'wpautop', true); // Wenn in dem "Benutzerdefinierten Feld" wpautop der Wert "yes" gesetzt wurde, // dann wird... if($wpautop=='yes'){ // Die Content Variable mit wpautop Funktion zurückgegeben return(wpautop($content)); }else{ // oder nur die Content-Variable ohne wpautop Funktion return($content); } } // Der Filter set_wpautop wird auf the_content angewendet. add_filter('the_content', 'set_wpautop'); |
Bei mir hat sich diese Variante bewährt und erleichtert mir das Arbeiten ungemein. Vielleicht hilft diese Funktion ja auch dem einen oder anderen von euch.
Viel Spaß damit.
Schlagworte zu diesem Artikel: Content, HTML, PHP, Suchmaschinenoptimierung, WordPress
Coole Idee mit der Felder-Aktivierung. Werd ich nächste Woche gleich mal ausprobieren.
Super Beschreibung und gut erklärt, funktioniert einwandfrei. Habe mir die Finger blutig gegooglet nach einer individuellen Lösung für die wpautop-Funktion.
Warum hat das noch keiner in WordPress rein programmiert?
Jedenfalls geht es jetzt, vielen Dank!
Gibts auch als Plugin: http://www.bake-the-web.de/2012/03/22/no-wpautop/
… da kann man auch einstellen, ob der Filter im Content, Excerpt oder beidem angewandt wird.
Ich frage mich auch warum sowas nicht in den WP-Einstellungen zu finden ist.