我注意到我的短代码中有无效的标记。如果我禁用它就可以了wpautop
tho公司
function shortcode_banner($attrs, $content = \'\') {
echo \' --- \' . $content . \' --- \';
$html = \'<section id="banner"><div class="wrap">\' . do_shortcode($content) . \'</div></section>\';
die($html);
}
启用autop时,我得到(注意关闭
</p>
一开始?)
--- </p>
<h1>The title</h1>
xxx ... xxx ...
---
<section id="banner"><div class="wrap"></p>
<h1>The title</h1>
xxx ... xxx ...
</div></section>
禁用时,我会
---
<h1>The header</h1>
xxx ... xxx ...
---
<section id="banner"><div class="wrap">
<h1>The header</h1>
xxx ... xxx ...
</div></section>
UPDATE: 我注意到只有当我有一个标签(例如。
<h1>
) 在我的短代码之后。例如:
[banner]
<h1>Test</h1>
如果我有
[banner]
xxx ...
没关系,只是Wordpress添加了
<br />
SO网友:onetrickpony
Try this:
// 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);
}