查找内容中的段落

时间:2011-07-31 作者:Mild Fuzz

我正在尝试创建两个函数,一个用于捕获某些内容的第一段,另一个用于捕获其余部分,但我遇到了一个难题。

我的单曲里有这个。php:

<div class=\'the_content\'>
  <?php the_content(); ?>
</div>
其产生:

<div class="the_content">
   <p>The content .....</p>
   <p>The content .....</p>
   <p>The content .....</p>
</div>
每个段落都用<p> 标签我假设我可以简单地打破explode() 基于字符串的内容</p>, 理论上,将内容分成几段,但all 内容位于第一个结果数组元素中。我调查过了没有<p> HTML编辑或数据库条目中的标记。两者看起来都像:

The Content .....
The Content .....
The Content .....
注:存在换行符,但不存在<p> 标签

Wordpress在哪里添加<p> 回来?它是如何找到换行符的,如何将函数挂接到该换行符中?

<小时>

FYI

以下是失败的函数,它密切基于the_content() 功能:

function get_first_paragraph(){
    $content = $firstcontent = get_the_content();
    $content = str_replace(\']]>\', \']]&gt;\', $content);
    $content = explode(\'</p>\',$content);

    return $content[0];
}

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

这些段落由wpautop() 函数,连接到the_content, the_excerpt() &;comment_text 以及\'term_description\' 用于分类。

@javipas链接的插件为添加这个插件付出了巨大的努力,但这是一个很好的例子(+1)。您可以(稍微修改一下)从中删除以下部分:

// The init function
function wpse24553_add_p_the_content()
{
    add_filter( \'the_content\', \'wpse24553_p_the_content\' );
    add_filter( \'the_content_feed\', \'wpse24553_p_the_content\' );
}
add_action( \'init\', \'wpse24553_add_p_the_content\' );

// The actual modification function
function wpse24553_p_the_content( $the_content )
{
    global $post;

    $content_by_p = preg_split( \'/<\\/p>/is\', $the_content );

    $i = 0;
    // Set a var to count until the targeted <p> is met - change this to your needs
    // Set to empty \'\' if you want to modify every paragraph
    $targeted_p = 1;

    static $new_content = \'\';

    foreach ( $content_by_p as $key => $p )
    {
        $i++;
        // abort and return the modified content if we\'re beyond the targeted <p>
        if ( $i > $targeted_p )
            {
            $new_content .= $p;
                    continue;
            }

        // Remove empty space at the end of a paragraph, then remove original <p>-tag
        $p = rtrim( $p );
        $p = preg_replace( \'/<p>/is\', \'\', $p );

        // Wrap replacements in new <p>-tags, so it validates
        $new_content .= \'<p class="paragraph-link"><a name="p-\'.$key.\'"></a>\';
        // Prepend the graf with an anchor tag
        $new_content .= \'<a ref="permalink" title="Permalink to this paragraph" href="\'.get_permalink( $post->ID ).\'#p-\'.$key.\'">#</a>;
        $new_content .= $p;
        $new_content .= \'</p>\';
    }

    // Return the new content
    return $new_content;
}
注释:

该函数需要放在函数中。php您需要自己用一个段落来修改函数和添加/删除/修改的内容(Q中没有用例)

SO网友:javipas

如果我理解你,你想要的是每一段的永久链接?著名博主戴夫·怀纳wrote about this 一年前,有一个插件叫做WinerLinks 这会在每个段落后面加一个“#”,使该段落可以链接。

我希望它对你有用。

SO网友:Michael

Wordpress在哪里添加<p> 回来了?

afaik,通过应用“the\\u content”过滤器。

函数的可能示例:

function get_first_paragraph() { 
    $text = apply_filters(\'the_content\', get_the_content() );
    $paragraphs = explode(\'</p>\', $text);
    $first_paragraph = array_shift($paragraphs).\'</p>\';
return $first_paragraph;
}
以及:

function get_last_paragraphs() { 
    $text = apply_filters(\'the_content\', get_the_content() );
    $paragraphs = explode(\'</p>\', $text);
    $first_paragraph = array_shift($paragraphs).\'</p>\';
    $rest_paragraphs = implode(\'</p>\', $paragraphs);
return $rest_paragraphs; 
}

结束