Wrap Shortcodes and wpautop

时间:2013-03-08 作者:Jimbo

WP让我现在拔出头发(过去几天一直在努力解决)。

尝试做一些简单的短代码,这些代码围绕着文章的各个要点。然而,我认为wpautop()正在造成巨大破坏。我尝试了网络上的各种建议,包括viperbonds(VIP.N:行情)和viperbonds(VIP.N:行情)等http://www.viper007bond.com/2009/11/22/wordpress-code-earlier-shortcodes/ ) 控制短代码何时运行,但无论是在wpautop之前还是之后运行,我仍然会遇到各种麻烦。它只格式化了没有瑕疵的短代码,并完全禁用了wpautop,但其余的帖子则没有格式化。

我有一个短代码[回顾\\u摘要]这里的结论文本/段落。。。由编辑撰写[/REVIEW\\u SUMMARY],简单来说,它构建了一组特定的、一致的标题,并从各种自定义元数据构建了评分、图像等。大部分情况下效果良好。

问题是我们有一个计分块,它作为此短代码最终内容的一部分输出:

<div class="tile-score"><div><span>9.9</span><small>Out of 10</small></div><b>Our score</b></div>
禁用wpautop的短代码的完整示例输出(由于太长而被剥离了一点):

<section><h1>Summary</h1>
<div id="score_review_container" class="clearfix"><a href="#" class="score-review-image"><img src="#" width="99" height="180" alt="#" /></a><div class="score-review-meta"><h2><a href="#">Item Reviewed</a></h2><div class="tile-score"><div><span class="ft-arb">9.9</span><small>Out of 10</small></div><b>Our score</b></div></div></div>Paragraph1...

Paragraph2...

Paragraph3...

Paragraph4...</section>        
它肯定没有换行符等WP应该格式化的内容(除了您期望的段落之外)。

但是,打开wpautop它会生成(在wpautop()之前运行):

<div class="tile-score">
<div><span>9.9</span><small>Out of 10</small></div>
<p><b>Our score</b></div>
生成的代码的完整版本(去掉一点)并在wpautop()运行之前运行:

<section>
  <h1>Summary</h1>
  <div id="score_review_container" class="clearfix">
    <a href="#" class="score-review-image">
      <img src="#" width="99" height="180" alt="#" />
    </a>
    <div class="score-review-meta">
      <h2><a href="#">Item Reviewed</a></h2>
      <div class="tile-score">
        <div><span class="ft-arb">9.9</span><small>Out of 10</small></div>
        <p><b>Our score</b>
      </div>
    </div>
   </div>
   <p>Paragraph1</p>
   <p>Paragraph2</p>
   <p>Paragraph3</p>
   <p>Paragraph4/p>
  </div>
</section>
请注意:那么Para4端实际上是这样的。缺少括号<;在我们得分之前插入。

在任何时候都不应该有任何我没有告诉它的换行符,也不应该有一个打开的标签,更不用说它不会关闭它和rogue breaked end p标签。

wpautop()之后运行的完整版本(已剥离):

<section>
  <h1>Summary</h1>
  <div id="score_review_container" class="clearfix">
    <a href="#" class="score-review-image">
      <img src="#" width="99" height="180" alt="#" />
    </a>
    <div class="score-review-meta">
      <h2><a href="#">Item Reviewed</a></h2>
      <div class="tile-score">
        <div><span class="ft-arb">9.9</span><small>Out of 10</small></div><b>Our score</b></div></div></div>Para1...</p><p>Para2...</p><p>Para3...</p><p>Para4...</section>
我完全弄不明白是什么产生了这些垃圾。以上是在运行wpautop()之前运行的一个示例,该示例将其余内容的所有段落保持在tack中的短代码内。

1 个回复
最合适的回答,由SO网友:Jimbo 整理而成

那么,解决这个问题的方法就是将内容包装在<p> 标记为绕过它的黑客。似乎是WP无法正确检测的唯一方法。

结束

相关推荐

Using shortcodes in PHP

我试图在我的页面中使用短代码,我从一个简单的测试开始。在里面functions.php:function HelloWorldShortcode() { return \'<p>Hello World!</p>\'; } add_shortcode(\'helloworld\', \'HelloWorldShortcode\'); 在中index.php:[helloworld] 这不会产生<p>Hello World