摘录长度:获取2个段落

时间:2014-11-26 作者:codebloo

我已成功实施solution from WPSE 这将删去除第一段之外的内容,但我想改为删去第二段之后的内容。

还有一个浮动的链接,可以让你以数组的形式访问段落,但这个链接现在已经失效了。

有关如何修改链接解决方案或新解决方案的建议?

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

我已根据您的需要修改了早期的解决方案。

您需要更改以下行

$wpse0001_excerpt = substr( $wpse0001_excerpt, 0, strpos( $wpse0001_excerpt, \'</p>\' ) + 4 );
到这个

$wpse0001_excerpt = explode(\'</p>\', $wpse0001_excerpt, 3);

// unset the rest of the contents
if(isset($wpse0001_excerpt[3]))         unset($wpse0001_excerpt[3]);            
// append </p> to the end of last paragraph
if(isset($wpse0001_excerpt[2]))          $wpse0001_excerpt[1] .= \'</p>\';
// combine all the paragraphs with appending the ending tag.
$wpse0001_excerpt = implode(\'</p>\', $wpse0001_excerpt);
在这里复制整个解决方案。

<?php

if ( ! function_exists( \'wpse0001_custom_wp_trim_excerpt\' ) ) : 

    function wpse0001_custom_wp_trim_excerpt($wpse0001_excerpt) {
    global $post;
    $raw_excerpt = $wpse0001_excerpt;
        if ( \'\' == $wpse0001_excerpt ) {

            $wpse0001_excerpt = get_the_content(\'\');
            $wpse0001_excerpt = strip_shortcodes( $wpse0001_excerpt );
            $wpse0001_excerpt = apply_filters(\'the_content\', $wpse0001_excerpt);

            $wpse0001_excerpt = explode(\'</p>\', $wpse0001_excerpt, 3);

            // unset the rest of the contents
            if(isset($wpse0001_excerpt[3]))         unset($wpse0001_excerpt[3]);            
            // append </p> to the end of last paragraph
            if(isset($wpse0001_excerpt[2]))          $wpse0001_excerpt[1] .= \'</p>\';
            // combine all the paragraphs with appending the ending tag.
            $wpse0001_excerpt = implode(\'</p>\', $wpse0001_excerpt);

            // $wpse0001_excerpt = substr( $wpse0001_excerpt, 0, strpos( $wpse0001_excerpt, \'</p>\', strpos( $wpse0001_excerpt, \'</p>\' ) + 4 ) + 4);

            $wpse0001_excerpt = str_replace(\']]>\', \']]&gt;\', $wpse0001_excerpt);

            $excerpt_end = \' <a href="\'. esc_url( get_permalink() ) . \'">\' . \'&nbsp;&raquo;&nbsp;\' . sprintf(__( \'Read more about: %s &nbsp;&raquo;\', \'pietergoosen\' ), get_the_title()) . \'</a>\'; 
            $excerpt_more = apply_filters(\'excerpt_more\', \' \' . $excerpt_end); 

            //$pos = strrpos($wpse0001_excerpt, \'</\');
            //if ($pos !== false)
            // Inside last HTML tag
            //$wpse0001_excerpt = substr_replace($wpse0001_excerpt, $excerpt_end, $pos, 0);
            //else
            // After the content
            $wpse0001_excerpt .= $excerpt_end;

            return $wpse0001_excerpt;   

        }
        return apply_filters(\'wpse0001_custom_wp_trim_excerpt\', $wpse0001_excerpt, $raw_excerpt);
    }

endif; 

remove_filter(\'get_the_excerpt\', \'wp_trim_excerpt\');
add_filter(\'get_the_excerpt\', \'wpse0001_custom_wp_trim_excerpt\'); 
注:未经测试。

SO网友:Pieter Goosen

老实说,这里没有确定段落的方法。是的,Wordpress有一个名为wpautop 那一套p 基于双线分隔符的标记(段落),这就是Wordpress定义为段落的全部内容,即由双线分隔符与另一段文本分隔的一段文本。

enter image description here

让我们看看我的开发网站上测试帖子的HTML截图,并进行分析(我的开发网站是用南非荷兰语写的,请原谅我的文字)

Here is what a paragraph can be

  • ARROW 1 这是另一个答案中代码插入的空段落。这是一个完整的段落,因为它有开头和结尾p 标签

  • ARROW 2 电影、音频文件、图像和a 由双线分隔符与其余内容分隔的标记

  • ARROW 5 一个段落可以只是一个空白。如果两个换行符之间有一个双空行符,则将其视为段落

  • ARROW 6 一个像这个词一样的词IngredientsMethod 在菜谱网站上,有时会出现两个双线分隔符。即使只有一句话也可以是一个段落

Here is what is not a paragraph

  • ARROW 3 & 4 虽然段落被定义为双线分隔符,但一些HTML标记被排除在外,并且没有包装在p 标记,无论它们是否位于双线分隔符之间。我马上想到的是h, liul 标签p 标签肯定会在某个地方失效。这真的会变得复杂和混乱。

    我在某个阶段对这篇文章进行了编码,但删除了它,因为事情就是这样发生的,段落的准确计数变得一团糟。我的解决方案是,看看你的结构,坐下来设计一个计划和工作流程,关于如何计算段落以及如何处理标签,如h, liul 标签

结束

相关推荐

每页完全不同的Functions.php?

是否可以通过条件加载完全不同的函数?i、 函数中的e。php您有一个条件加载在旧函数的include中,然后有另一个条件加载在新函数中?这样做的原因是一个网站正在呈现新的面貌,但只是一页一页,旧的样式和功能很混乱,需要更换,但我不能只是删除它们,因为网站的其余部分将失败。