抓住每个帖子的第一段

时间:2013-12-20 作者:tmyie

我有一些代码使用preg\\u match获取第一段,然后在循环中吐出:

function first_paragraph() {
  global $post, $posts;
  $first_para = \'\';
  ob_start();
  ob_end_clean();
  $output = preg_match_all(\'%(<p[^>]*>.*?</p>)%i\', $post->post_content, $matches);
  $first_para = $matches [1] [0];
  echo $first_para;
}
然而,这有一个小问题。仅当我手动将文本换行时,它才起作用<p> </p> 编辑器中的标记,而不是其他。正则表达式当然不是我的专长,所以任何帮助或进一步的理解都会很好。

这样也可以将图像/iFrame包装在p标记中:

function first_paragraph() {
  global $post, $posts;
  $first_para = \'\';
  ob_start();
  ob_end_clean();
  $post_content = $post->post_content;
  $post_content = apply_filters(\'the_content\', $post_content);
  $output = preg_match_all(\'%(<p[^>]*>.*?</p>)%i\', $post_content, $matches);
  $first_para = $matches [1] [0];
  echo $first_para;
}

2 个回复
SO网友:davidcondrey

您可以使用此功能:

function get_first_paragraph(){
    global $post;
    $str = wpautop( get_the_content() );
    $str = substr( $str, 0, strpos( $str, \'</p>\' ) + 4 );
    $str = strip_tags($str, \'<a><strong><em>\');
    return \'<p>\' . $str . \'</p>\';
}
然后在循环中调用:

<?php echo get_first_paragraph(); ?>
你要找的魔法部分是wpautop, Wordpress函数,将文本中的双线分隔符转换为适当的段落。

有了wpautop,就可以使用PHP函数substr 获取从第一个字符开始的第一段,直到到达第一个结束段,然后添加4个字符,以便结束标记不会被删除。

要进一步扩展,如果您想获取除第一段以外的所有内容,可以使用此补充功能,该功能将从第一个结束段标记的末尾开始,并获取后面的所有内容:

function get_the_post(){
    global $post;
    $str = wpautop( get_the_content() );
    $str = substr( $str, (strpos( $str, \'</p>\')));
    return $str;
}
并在循环中调用它:

<?php echo get_the_post(); ?>

SO网友:Nathan Fitzgerald - Fitzgenius

Try this:

function first_paragraph() {
    global $post, $posts;
    $post_content = $post->post_content;
    $post_content = apply_filters(\'the_content\', $post_content);
    $post_content = str_replace(\'</p>\', \'\', $post_content);
    $paras = explode(\'<p>\', $post_content);
    array_shift($paras);

    return $paras[0]; 
}
结束

相关推荐

Querying Term Posts in Loop

我试图在标题下显示我的CPT类别以及与之相关的任何帖子。我有第一个循环,很好:<?php $cats = get_categories(array(\'taxonomy\' => \'custtax\', \'orderby\' => \'term_group\')); if(!empty($cats)) : foreach($cats as $cat) : ?> <a href=\"<?php