-2

这对我来说是一个很难正确措辞的问题,但我试图在段落之间动态插入一个 ASIDE [具体来说,只是一个“特别感谢”注释]。最初我决定在第二段之后使用 substr_count() 删除它。我正在浮动这个块,所以如果它必须处理的只是文本内容,那么自动换行是没有问题的。但是,如果它与图像或 PRE 或其他任何东西相邻运行,它就会变得不稳定。

无论如何,我想要做的是检测何时第一次出现两个相邻的段落并在它们之间插入我的旁边。IE:

<p> Here is the first paragraph. </p>
<aside> INSERT THIS HERE </aside>
<p> Here is the second paragraph. </p>

想法受到赞赏。

更新:我目前正在使用的 substr_count()。

因为我因为没有显示原始代码而被否决,所以我会在下面发布。我正在使用 Wordpress,但这不是 WP 特定的问题,因为我将 the_content() 作为字符串,计算 P 的出现次数,并在那里插入自定义字段。这最终不是我想要做的,但我想计算两个并发 P 并在其间插入这个字段。它的格式可能很奇怪,当然,当我从我的编辑器中 c/p 时,东西到处都是。

$thanks = get_post_meta(get_the_ID(), 'thanks', true);

if (!$thanks) {
  the_content();
}

else {
  $show_after_p = 0;
  $content = apply_filters('the_content', $post->post_content);
  if(substr_count($content, '<p>') > $show_after_p) {
$contents = explode("</p>", $content);
$p_count = 0;
foreach($contents as $content)
     {
   echo $content;
   if($p_count == $show_after_p)
  {
?>
<aside class="thanks clearfix">
    <p>
      <?php echo '<span>Special thanks: </span>'.$thanks; ?>
    </p>
</aside>
<?php } 
echo "</p>";
$p_count++;
}
}
}
?>

为什么不是 JS? 好吧,javascript 绝对可以做到这一点,但如果我可以在 PHP 中做到这一点,那么 yahtzee。

4

2 回答 2

1

使用正则表达式和preg_replace- 搜索:(closing of P){whitespaces (if any)}(opening P)并将空格更改为您的文本。

类似的东西:

 $content = preg_replace('#</p>\s*<p#', "</p><aside> INSERT THIS HERE </aside><p", $content);
于 2013-07-28T00:37:47.033 回答
0

感谢Jerzy Zawadzki的灵感。如果您参考原始代码,我使用explode() 对P 标签处的内容进行了分段。现在我使用 preg_split() 如下:

$contents == preg_split('#</p>\s*<p>#', $content); // Thanks Jerzy
$i = 0;
foreach ( $contents as $content ) { 
  echo $content;
  if ( $i == $show_after_p ) { // this is set to 0 right now
    // insert aside here
  }
  echo "<p>";
  $i++;
 }
}

据我所知,这只会在有并发段落且没有空格/图像/其他元素的段中破坏内容。在第一个交界处,我插入旁边。然后内容正常显示。

于 2013-07-28T01:39:40.260 回答