删除摘录中标题标记内的文本

时间:2012-04-17 作者:Boutros AbiChedid

使用默认的WordPress摘录功能。WordPress去掉标题标记(例如h1标记),但保留位于h1标记打开/关闭范围内的未格式化文本,作为摘录的一部分显示。

在显示摘录时,除了对h1标记进行条带化外,还有没有其他方法可以完全删除标记中的文本?

谢谢

4 个回复
SO网友:Chip Bennett

您可以考虑使用user-defined excerpt (即amanual excerpt, 它保留HTML标记,而不仅仅依赖于自动摘录,自动摘录会剥离HTML标记。

根据您的具体用例,使用手动摘录来显示HTML格式的摘录通常是一种更简单的方法。

SO网友:axelparatre

这是一个适合我的函数。

function bac_wp_strip_header_tags( $text ) {
     $raw_excerpt = $text;
     if ( \'\' == $text ) {
         //Retrieve the post content.
         $text = get_the_content(\'\'); 
         //remove shortcode tags from the given content.
         $text = strip_shortcodes( $text );
         $text = apply_filters(\'the_content\', $text);
         $text = str_replace(\']]>\', \']]>\', $text);

         //Regular expression that strips the header tags and their content.
         $regex = \'#(<h([1-6])[^>]*>)\\s?(.*)?\\s?(<\\/h\\2>)#\';
         $text = preg_replace($regex,\'\', $text);

         /***Change the excerpt word count.***/
         $excerpt_word_count = 55; //This is WP default.
         $excerpt_length = apply_filters(\'excerpt_length\', $excerpt_word_count);

         /*** Change the excerpt ending.***/
         $excerpt_end = \'[...]\'; //This is the WP default.
         $excerpt_more = apply_filters(\'excerpt_more\', \' \' . $excerpt_end);

         $excerpt = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return apply_filters(\'wp_trim_excerpt\', $excerpt, $raw_excerpt);
    }
    add_filter( \'get_the_excerpt\', \'bac_wp_strip_header_tags\', 5);

SO网友:mor7ifer

add_filter( \'the_excerpt\', \'wpse49280_strip_header_tags\', 1 );
function wpse49280_strip_header_tags( $excerpt ) {
    // this is just an example, there is probably a better regex
    $regex = \'#(<h([1-6])[^>]*>)\\s?(.*)?\\s?(<\\/h\\2>)#\';
    return preg_replace(
        $regex,
        \'\',
        $excerpt
    );
}
应该注意的是,regexing HTML并不是最好的解决方案,但我认为对于像这样简单的东西来说,它是最实用的。

SO网友:Boutros AbiChedid

感谢@m0r7if3r对您的所有帮助。我不认为我能理解Regex的部分。这是我正在使用的代码,它可以工作:

function wp_strip_header_tags( $text ) {

$raw_excerpt = $text;
if ( \'\' == $text ) {
    //Retrieve the post content.
    $text = get_the_content(\'\'); 
    //remove shortcode tags from the given content.
    $text = strip_shortcodes( $text );
    $text = apply_filters(\'the_content\', $text);
    $text = str_replace(\']]>\', \']]>\', $text);
}
    $regex = \'#(]*>)\\s?(.*)?\\s?()#\';
    $text = preg_replace($regex,\'\', $text);

    /***Change the excerpt word count.***/
    $excerpt_word_count = 60; //WP default is 55
    $excerpt_length = apply_filters(\'excerpt_length\', $excerpt_word_count);

    /*** Change the excerpt ending.***/
    $excerpt_end = \'[...]\'; //This is the WP default.
    $excerpt_more = apply_filters(\'excerpt_more\', \' \' . $excerpt_end);

    $excerpt = wp_trim_words( $text, $excerpt_length, $excerpt_more );

    return apply_filters(\'wp_trim_excerpt\', $excerpt, $raw_excerpt);
}
add_filter( \'get_the_excerpt\', \'wp_strip_header_tags\', 5);

结束

相关推荐

Auto Populate Excerpt Field

如何用帖子内容的前15个单词自动填充摘录字段?我找到了以下片段:function wps_excerpt_content( $content ) { $content = \"YOUR EXCERPT HERE\"; return $content; } add_filter( \'default_excerpt\', \'wps_excerpt_content\' ); 但我不知道如何根据需要修改它。有什么帮助吗?