Schnipsel: Leere Absätze in WordPress löschen

WordPress setzt gelegentlich nach und vor Shortcodes leere <p> Tags, um einen „Break“ vorzugauckeln. Um das zu beheben, hilft ein kleiner jQuery Schnipsel, den du am besten auch über ein Plugin hinzufügst. Setze folgenden Code einfach in deine functions.php oder in dein Plugin.

Schnipsel

Hier folgen jetzt verschiedene Lösungsansätze. Zum Schluß findest du auch noch eine mögliche Lösung mithilfe eines WordPress-Plugins.

Lösung 1: WordPress & jQuery

/**
 * Entfernt leere Absätze
 */
function remove_empty_p_tags() { 
  echo '<script>jQuery("p:empty").remove();</script>'; 
} 
add_action( 'wp_footer', 'remove_empty_p_tags' );Code-Sprache: PHP (php)

Lösung 2: jQuery

(function($) {
  $('p:empty').remove();
})(jQuery);Code-Sprache: JavaScript (javascript)

Lösung 3: CSS

p:empty { display: none; }Code-Sprache: CSS (css)

Lösung 4: WordPress & PHP

Die oben genannten Schnipsel funktionieren leider nicht immer. Ich habe nach einer Alternative gesucht und bin fündig geworden:

/**
 * Entfernt Absätze die durch Shortcodes eingefügt werden.
 * 
 * @param string $content
 * 
 * @return string
 */
function shortcode_empty_paragraph_fix( $content ) {
	$shortcodes = [
		'shortcode_1', // shortcode 1
		'shortcode_2' // shortcode 2
	];
	
	foreach ( $shortcodes as $shortcode ) :
		$array = [
			'<p>[' . $shortcode    => '[' . $shortcode,
			'<p>[/' . $shortcode   => '[/' . $shortcode,
			$shortcode . ']</p>'   => $shortcode . ']',
			$shortcode . ']<br />' => $shortcode . ']'
		];
		
		$content = strtr( $content, $array );
	endforeach;

	return $content;
}
add_filter( 'the_content', 'shortcode_empty_paragraph_fix' );Code-Sprache: PHP (php)

Wichtig ist, dass du deine Shortcodes in den Array setzt. Den Schnipsel setzt du dann in deine functions.php oder in dein Plugin. Weitere Informationen, kannst du der Quelle entnehmen:

Wichtig: Setze benutzerdefinierte Inhalte immer mit einem Plugin ein, damit deine Änderungen in der functions.php nicht von einem Theme-Update überschrieben werden.