Ich stelle fest, dass das Markup in meinem Shortcode ungültig ist. Es ist in Ordnung, wenn ich wpautop
deaktiviere
function shortcode_banner($attrs, $content = '') {
echo ' --- ' . $content . ' --- ';
$html = '<section id="banner"><div class="wrap">' . do_shortcode($content) . '</div></section>';
die($html);
}
Wenn Autop aktiviert ist bekomme ich (beachte den schließenden </p>
beim Start?)
--- </p>
<h1>The title</h1>
xxx ... xxx ...
---
<section id="banner"><div class="wrap"></p>
<h1>The title</h1>
xxx ... xxx ...
</div></section>
Wenn ich behindert bin, bekomme ich
---
<h1>The header</h1>
xxx ... xxx ...
---
<section id="banner"><div class="wrap">
<h1>The header</h1>
xxx ... xxx ...
</div></section>
UPDATE: Ich bemerke dies nur, wenn ich nach meinem Shortcode ein Tag (z. B. <h1>
) habe. Mögen:
[banner]
<h1>Test</h1>
Wenn ich habe
[banner]
xxx ...
es ist in Ordnung, außer dass Wordpress einen <br />
hinzufügt
Versuche dies:
// replaces [banner ...] .. [/banner] with <!--banner ID--> before the_content filters run
add_filter('the_content', 'protect_my_shortcode', -100);
function protect_my_shortcode($content){
return preg_replace_callback('/\[(banner)\b(.*?)(?:(\/))?\](.+?)\[\/\1\]/s', 'protect_my_shortcode_callback', $content);
}
function protect_my_shortcode_callback($matches){
global $__banners;
$id = '<!--banner '.count($__banners).'-->';
$__banners[$id] = do_shortcode($matches[0]);
// or '['.$matches[1].' '.$matches[2].']'.$matches[4].'[/'.$matches[1].']'
// if you need to run any filters on the shortcode content ($matches[4])
return $id;
}
// replaces <!--banner ID--> with the processed shortcode after all the filters run
add_filter('the_content', 'unprotect_my_shortcode', 100);
function unprotect_my_shortcode($content){
global $__banners;
return str_replace(array_keys($__banners), array_values($__banners), $content);
}
Ich weiß nicht, was dieses Problem verursacht, aber Sie können die Funktion force_balance_tags()
verwenden, um das Markup nachträglich zu bereinigen.
Beachten Sie, dass die Verwendung von force_balance_tags()
in der Praxis einige Einschränkungen aufweist .