摘录长度:获取第一段

时间:2013-02-26 作者:user1374796

我想知道是否有可能从每篇文章中摘录一段,从每篇文章中抓取第一段。我目前正在使用ACF插件,并且有自定义的帖子类型和自定义字段
这是我的代码:

function custom_field_excerpt() {
    global $post;
    $text = get_field(\'news\');
    if ( \'\' != $text ) {
        $text = strip_shortcodes( $text );
        $text = apply_filters(\'the_content\', $text);
        $text = str_replace(\']]>\', \']]>\', $text);
        $excerpt_length = 20; // 20 words
        $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return apply_filters(\'the_excerpt\', $text);
}
这很好,但它只删减了前20个单词(或者不管你指定了多少个单词),我正试图调整它,将每个帖子的第一段拉进去,而不是前20个单词。这有可能吗?

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

假设您的段落标记为<p> 可在ACF字段选项中设置的标记,应满足以下要求:

function custom_field_excerpt() {
    global $post;
    $text = get_field(\'news\');
    if ( \'\' != $text ) {
        $start = strpos($text, \'<p>\'); // Locate the first paragraph tag
        $end = strpos($text, \'</p>\', $start); // Locate the first paragraph closing tag
        $text = substr($text, $start, $end-$start+4); // Trim off everything after the closing paragraph tag
        $text = strip_shortcodes( $text );
        $text = apply_filters(\'the_content\', $text);
        $text = str_replace(\']]>\', \']]>\', $text);
    }
    return $text;
}
您还可以很容易地修改它来定位第一个<br /> 标签,如果您碰巧将ACF数据存储在<br />\'s而不是<p>\'s

SO网友:davidcondrey

如果您将wpautop添加到其中,即使您没有手动使用段落标记标记文章,它也应该仍然有效,因为wpautop会自动将双线分隔符转换为格式正确的段落。

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>\';
}
如果您想在整篇文章中切换,可以使用此附加功能获取除第一段之外的所有内容:

function get_the_post(){
    global $post;
    $str = wpautop( get_the_content() );
    $str = substr( $str, (strpos( $str, \'</p>\')));
    return $str;
}

结束
摘录长度:获取第一段 - 小码农CODE - 行之有效找到问题解决它

摘录长度:获取第一段

时间:2013-02-26 作者:user1374796

我想知道是否有可能从每篇文章中摘录一段,从每篇文章中抓取第一段。我目前正在使用ACF插件,并且有自定义的帖子类型和自定义字段
这是我的代码:

function custom_field_excerpt() {
    global $post;
    $text = get_field(\'news\');
    if ( \'\' != $text ) {
        $text = strip_shortcodes( $text );
        $text = apply_filters(\'the_content\', $text);
        $text = str_replace(\']]>\', \']]>\', $text);
        $excerpt_length = 20; // 20 words
        $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return apply_filters(\'the_excerpt\', $text);
}
这很好,但它只删减了前20个单词(或者不管你指定了多少个单词),我正试图调整它,将每个帖子的第一段拉进去,而不是前20个单词。这有可能吗?

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

假设您的段落标记为<p> 可在ACF字段选项中设置的标记,应满足以下要求:

function custom_field_excerpt() {
    global $post;
    $text = get_field(\'news\');
    if ( \'\' != $text ) {
        $start = strpos($text, \'<p>\'); // Locate the first paragraph tag
        $end = strpos($text, \'</p>\', $start); // Locate the first paragraph closing tag
        $text = substr($text, $start, $end-$start+4); // Trim off everything after the closing paragraph tag
        $text = strip_shortcodes( $text );
        $text = apply_filters(\'the_content\', $text);
        $text = str_replace(\']]>\', \']]>\', $text);
    }
    return $text;
}
您还可以很容易地修改它来定位第一个<br /> 标签,如果您碰巧将ACF数据存储在<br />\'s而不是<p>\'s

SO网友:davidcondrey

如果您将wpautop添加到其中,即使您没有手动使用段落标记标记文章,它也应该仍然有效,因为wpautop会自动将双线分隔符转换为格式正确的段落。

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>\';
}
如果您想在整篇文章中切换,可以使用此附加功能获取除第一段之外的所有内容:

function get_the_post(){
    global $post;
    $str = wpautop( get_the_content() );
    $str = substr( $str, (strpos( $str, \'</p>\')));
    return $str;
}

相关推荐

_Excerpt筛选器未按预期工作

我有个问题the_excerpt 滤器出于某种原因,如果在帖子列表中显示的帖子只包含短代码,它将无论如何执行这些短代码。我想要的是,如果它是一个封闭的短代码,则显示内容;如果它是一个自动关闭的短代码,则将其全部删除,如果是这种情况,则返回一个空字符串。我用这个函数去掉所有的短代码(因为strip_shortcodes($content)) 也不起作用:add_filter(\'the_excerpt\', \'my_custom_excerpt\' ); function my_custom_ex