shortcode_unautop shortcode funktioniert nicht

Ich habe mein eigenes Thema mit Shortcodes zu WordPress gemacht.

In meinen Filtern habe ich:

remove_filter('the_content', 'wpautop'); add_filter('the_content', 'wpautop', 99); add_filter('the_content', 'shortcode_unautop', 100); 

Dies sollte Absatzmarken um und in meinen Shortcodes entfernen.

Meine Shortcode-Ausgabe (Teil des gesamten Codes):

 $output .= '  '; // Script newlines whitespace, tabs etc. return str_replace(["\r", "\n", "\t"], '', '
' . $output . '
');

Dies produziert:

  

Beachten Sie die zusätzlichen

-Tags in Zeile 15, 29 und 43. Die Absatztags verschwinden, wenn ich den Anker-Tag in meinem Shortcode entferne, aber das ist keine Lösung, die ich verwenden kann.

Solutions Collecting From Web of "shortcode_unautop shortcode funktioniert nicht"

Das ist die Lösung:

 function wpex_fix_shortcodes($content) { return strtr($content, [ '

[' => '[', ']

' => ']', ']
' => ']' ]); } remove_filter('the_content', 'wpautop'); remove_filter('the_content', 'do_shortcode', 11); add_filter('the_content', 'wpautop', 100); add_filter('the_content', 'wpex_fix_shortcodes', 105); add_filter('the_content' , 'do_shortcode', 110);

Dies führt wpautop vor do_shortcode aus, entfernt jedoch die Absatztags vor und nach den unformatierten Shortcodes und führt dann do_shortcode aus.

BEARBEITEN

Die obige Lösung kann auch einige HTML-Fehler verursachen. Am besten wäre es, den wpautop-Filter zu entfernen und dann einen Shortcode hinzuzufügen, der wpautop um den Inhalt herum aufruft. So was:

 add_shortcode('text', function($attributes, $content = null) { // Output return do_shortcode(wpautop($content)); }); 

Versuchen Sie vielleicht, alle Zeilenumbrüche aus der Ausgabe selbst zu entfernen, da dies letztendlich mit dem Ergebnis verwechselt wird …

 $output .= ' 

…und so weiter. Wenn die Zeilenumbrüche weg sind, wird wpautop den Shortcode-Ausgang möglicherweise alleine lassen.

Andernfalls, da es sich um eine sehr spezifische und falsch formatierte String-Ausgabe handelt, könnten Sie im Nachhinein immer dafür sorgen:

 add_filter('the_content','shortcode_fix',110); function shortcodefix($content) { return str_replace('

','',$content); }