这对我来说是一个很难正确拼写的问题,但我试图在段落之间动态插入一个ASIDE[特别是一个"特别感谢"注释]。最初,我决定在第二段之后使用substra_count()来删除它。我正在浮动这个块,所以如果它所要处理的只是文本内容,就没有问题用词包装它。然而,如果它与图像、PRE或其他任何东西相邻,它就会变得不稳定。
无论如何,我想做的是检测何时第一次出现两个相邻的段落,并在它们之间插入我的旁白。即:
<p> Here is the first paragraph. </p>
<aside> INSERT THIS HERE </aside>
<p> Here is the second paragraph. </p>
思想是值得赞赏的。
更新:我当前使用的substra_count()
因为我因为没有显示原始代码而被投票否决,所以我会在下面发布它。我使用Wordpress,但这不是WP特定的问题,因为我将_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。
使用正则表达式和preg_replace
-搜索:(closing of P){whitespaces (if any)}(opening P)
并将空格更改为文本。
类似的东西:
$content = preg_replace('#</p>'s*<p#', "</p><aside> INSERT THIS HERE </aside><p", $content);
感谢耶日·扎瓦兹基的灵感。如果您参考原始代码,我会使用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++;
}
}
据我所知,这只会在有并发段落且没有空格/图像/其他元素的片段中分解内容。在第一个连接处,我插入旁白。然后内容显示为正常。