我注意到我的短代码中有无效的标记。如果我禁用它就可以了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);
}