将摘录修剪到第一段

时间:2016-11-23 作者:Mike

我试图通过在我的主题函数中添加过滤器,将摘录删减到第一段。php文件。我在本地机器上(使用WAMP)可以很好地工作,但在我的实际web服务器上,它会输出整个帖子,而不是我期望的段落。以下是我要删减的摘录:

// Set the excerpt length to more than necessary
function triangle_x_excerpt_length($length)
{
    return 999;
}
add_filter(\'excerpt_length\', \'triangle_x_excerpt_length\', 999);

// Get the first paragraph of the article
function triangle_x_excerpt($text, $raw_excerpt)
{
    if(!$raw_excerpt)
    {
        $content = apply_filters( \'the_content\', get_the_content() );
        $text = substr( $content, 0, strpos( $content, \'</p>\' ) + 4 );
    }
    $text = preg_replace("/<img[^>]+\\>/i", "", $text); 
    return $text;
}
add_filter(\'get_the_excerpt\', \'triangle_x_excerpt\', 20, 2);

// Remove read more link at end of excerpt
function new_excerpt_more($more)
{
    return \'\';
}
add_filter(\'excerpt_more\', \'new_excerpt_more\');

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

您可以将其与regEx匹配,并轻松选择要返回的段落数量。

// in context
function triangle_x_excerpt( $text, $raw_excerpt ) {

    $content = apply_filters( \'the_content\', get_the_content() );

    $text    = ( preg_match( sprintf( \'~(<p>.+?</p>){%d}~i\', 1 ), $content, $matches ) ) ? $matches[ 0 ] : $content;

    return preg_replace( "/<img[^>]+\\>/i", "", $text );
}
<小时>
$text = prefix_get_p( $content, 1);
<小时>
function prefix_get_p($content, $max = 1)
{
    $max = is_numeric($max) ? absint($max) : 1;

    return (preg_match(sprintf(\'~(<p>.+?</p>){%d}~i\', $max), $content, $matches)) ? $matches[0] : $content;
}

echo "Limit 1" . PHP_EOL;
echo prefix_get_p(\'<p>aaaaa</p><p>bbbbb</p><p>ccccc</p><p>dddddd</p><p>eeeeeee</p><p>ffffff</p>\', 1); // <p>aaaaa</p>

echo "Limit 3" . PHP_EOL;
echo prefix_get_p(\'<p>aaaaa</p><p>bbbbb</p><p>ccccc</p><p>dddddd</p><p>eeeeeee</p><p>ffffff</p>\', 3); // <p>aaaaa</p><p>bbbbb</p><p>ccccc</p>

echo "Limit 2" . PHP_EOL;
echo prefix_get_p(\'<p>aaaaa</p><p>bbbbb</p><p>ccccc</p><p>dddddd</p><p>eeeeeee</p><p>ffffff</p>\', 2); // <p>aaaaa</p><p>bbbbb</p>

相关推荐

GET_POSTS查询大约需要40秒来执行

我在get\\u帖子中有一个元查询,它需要花很长时间才能完成。它工作得很好,但只是时间太长了。我有一个名为event. 在每个event 发布后,有自定义元数据:post\\U sort\\U日期(事件日期YmdHis 格式,用于排序)我需要做的是获取下一个事件,该事件相对于$year 和$month 变量。所以如果$year = 2021 和$month = 10 (2021 10月)然后应该在2021 11月或之后找到第一个事件。我下面的查询很好,但很慢。执行大约需要40秒,我不知道为什么。$next