合并两个摘录函数以处理条件

时间:2016-06-05 作者:Darren Bachan

我有两个影响the_excerpt:

// Grab First Paragraph Of Text And Ignore Images For Excerpt
    function awesome_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( \'wp_trim_excerpt\', \'awesome_excerpt\', 10, 2 );

function excerpt($limit) {
        $excerpt = explode(\' \', get_the_excerpt(), $limit);
        if (count($excerpt)>=$limit) {
            array_pop($excerpt);
            $excerpt = implode(" ",$excerpt).\'...\';
          } else {
            $excerpt = implode(" ",$excerpt);
          } 
        $excerpt = preg_replace(\'`\\[[^\\]]*\\]`\',\'\',$excerpt);
        return $excerpt;
    }
现在,在我的index.php, 这些帖子显示了帖子的第一段。当你点击一个名为“相关帖子”的区域中的帖子时,我也试图显示摘录。在相关帖子中,我希望它显示x个字符的限制。

index.php 我把它作为the_excerpt, 但在我的相关帖子中,我称之为<?php echo excerpt(25);?>. 这就是我为相关帖子调用标记时的样子,如:

<div class="recent-meta-excerpt">
   <?php echo excerpt(25);?>
   <a class="read-more" href="<?php the_permalink(); ?>">Read More <i class="fa fa-long-arrow-right"></i></a>
</div>
输出如下:

 <div class="recent-meta-excerpt">
       <p>It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout....
       <a class="read-more" href="http://www.stepyouraimup.com/blog/no-featured-image/">Read More <i class="fa fa-long-arrow-right"></i></a>
       </p>
    </div>
但我不想<a> 在…内当我打电话的时候the_excerpt 在相关岗位上<a> 它在<p>. 关于索引中的主要帖子。php它将文章的第一段包装成<p>, 这是正确的。我也想对相关帖子的摘录做同样的处理,但它不应该有<a> 在里面。如果它在通话之外,为什么要包含在通话中?

如果您想要一个真实的示例,请单击here 要查看我的博客,请单击帖子以查看相关帖子。

1 个回复
SO网友:BillK

取决于您在循环中调用的位置excerpt() wpautop可能正在创建<p>...</p> 包装器。那样的话,你可以$excerpt 具有<p>...</p> 在归还之前。

编辑:尝试此方法<?php echo excerpt(25)."\\n";?> (或可能"\\n\\n") 改变行为。

在功能中awesome_excerpt() 你有$text = substr( $content, 0, strpos( $content, \'</p>\' ) + 4 ); 所以$text 必须包含开头<p>. 这可能是你所描述的原因。添加str_ireplace(\'<p>\', \'\', $excerpt) 在里面function excerpt() 通话前explode.

在您问题中显示的当前代码中,不清楚在哪里function excerpt() 正在调用。

为什么不直接使用excerpt_length 是否筛选以修改摘录的长度?从Codex:

function custom_excerpt_length( $length ) { return 25; } add_filter( \'excerpt_length\', \'custom_excerpt_length\', 999 );