在PHP中<p>标记之前插入内容</p>

时间:2013-04-30 04:30:47

标签: php wordpress loops for-loop foreach

虽然这是以Wordpress为导向的,但我认为PHP的基础更像是Stackoverflow问题:

我想在帖子的第一个include()之前添加template_part(类似于<p>)。

我无法在the_content()之前添加template_part,因为the_content()内部有时是<figure>,然后是<p>

<figure>....</figure>
// Want to insert here!
<p>.......</p>
<p>.......</p>
<p>.......</p>
<figure>....</figure>
<p>.......</p>
<p>.......</p>

这是我尝试使用的两个代码,但不确定如何在第一个代码<p>之前完成:

方法一:

$after = 1;
$content = apply_filters('the_content', $post->post_content);
if(substr_count($content, '<p>') > $after) {
    $contents = explode("</p>", $content); $p_count = 0;
    foreach($contents as $content){
        echo $content; if($p_count == $after){
            get_template_part('path/to/part');
        } $p_count++;
    }
}

方法二:

$paragraphAfter[1] = get_template_part('path/to/part');
$content = apply_filters( 'the_content', get_the_content() );
$content = explode("</p>", $content);
$count = count($content);
for ($i = 0; $i < $count; $i++ ) {
    if ( array_key_exists($i, $paragraphAfter) ) {
        echo $paragraphAfter[$i];
    }
    echo $content[$i] . "</p>";
}

最好是更有效的方法,无论是从上面还是你自己的方法:]

1 个答案:

答案 0 :(得分:0)

肮脏的黑客可能是:

function add_the_string_filter( $content ) {
  $string_to_append = 'your string to add';
  $content = preg_replace('/<p>/',  $string_to_append . '<p>', $content , 1);

  return $content;
}

add_filter( 'the_content', 'add_the_string_filter' );

preg_replace的最后一个参数是限制,它告诉我只替换第一次出现。