问题描述

正如在标题中所说,我正在 WordPress 中寻找多个摘录长度。

我明白你可以在 functions.php 中做到这一点:

function twentyten_excerpt_length( $length ) {
    return 15;
}
add_filter( 'excerpt_length', 'twentyten_excerpt_length' );

我想知道的是,您可以如何将这些数据中的多个返回不同的数值,以便我可以获得边栏循环的较短摘要,特色循环的更长的摘录以及主要文章的最长摘录。

在模板中使用这些东西:

<?php the_excerpt('length-short') ?>
<?php the_excerpt('length-medium') ?>
<?php the_excerpt('length-long') ?>

干杯,戴夫

最佳解决方案

怎么样…

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;
    }

    function content($limit) {
      $content = explode(' ', get_the_content(), $limit);
      if (count($content)>=$limit) {
        array_pop($content);
        $content = implode(" ",$content).'...';
      } else {
        $content = implode(" ",$content);
      }
      $content = preg_replace('/[.+]/','', $content);
      $content = apply_filters('the_content', $content);
      $content = str_replace(']]>', ']]&gt;', $content);
      return $content;
    }

那么在你的模板代码中你只是使用..

<?php echo excerpt(25); ?>

来自:http://bavotasan.com/tutorials/limiting-the-number-of-words-in-your-excerpt-or-content-in-wordpress/

次佳解决方案

至于现在,你可以升级 Marty 的回复:

function excerpt($limit) {
    return wp_trim_words(get_the_excerpt(), $limit);
}

您也可以通过以下方式定义自定义’read more’ 链接:

function custom_read_more() {
    return '... <a class="read-more" href="'.get_permalink(get_the_ID()).'">more&nbsp;&raquo;</a>';
}
function excerpt($limit) {
    return wp_trim_words(get_the_excerpt(), $limit, custom_read_more());
}

第三种解决方案

这是我想出来的。

将其添加到您的 functions.php

class Excerpt {

  // Default length (by WordPress)
  public static $length = 55;

  // So you can call: my_excerpt('short');
  public static $types = array(
      'short' => 25,
      'regular' => 55,
      'long' => 100
    );

  /**
   * Sets the length for the excerpt,
   * then it adds the WP filter
   * And automatically calls the_excerpt();
   *
   * @param string $new_length
   * @return void
   * @author Baylor Rae'
   */
  public static function length($new_length = 55) {
    Excerpt::$length = $new_length;

    add_filter('excerpt_length', 'Excerpt::new_length');

    Excerpt::output();
  }

  // Tells WP the new length
  public static function new_length() {
    if( isset(Excerpt::$types[Excerpt::$length]) )
      return Excerpt::$types[Excerpt::$length];
    else
      return Excerpt::$length;
  }

  // Echoes out the excerpt
  public static function output() {
    the_excerpt();
  }

}

// An alias to the class
function my_excerpt($length = 55) {
  Excerpt::length($length);
}

它可以像这样使用。

my_excerpt('short'); // calls the defined short excerpt length

my_excerpt(40); // 40 chars

这是我知道添加过滤器的最简单的方法,可以从一个函数调用。

第四种方案

我也在寻找这个功能,这里的大多数功能是好的和灵活的。对于我自己的案例,我正在寻找一个解决方案,仅在特定页面上显示不同的摘录长度。我使用这个:

function custom_excerpt_length( $length ) {
    return (is_front_page()) ? 15 : 25;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

将此代码粘贴到主题 functions.php 文件中。

第五种方案

回到马蒂的回复:

我知道这个答复已经出版了一年多,但是比以前更好。为了使 WordPress 默认值为 55 的限制,您需要替换此行:

     $excerpt = explode(' ', get_the_excerpt(), $limit);

用这一行:

     $excerpt = explode(' ', get_the_content(), $limit);

否则,该功能仅适用于已经存在的 trimmed-down 文本。

第六种方案

我想我们现在可以用 wp_trim_words see here 。不知道使用这个功能需要额外的数据转义和消毒,但它看起来很有趣。

第七种方案

你可以添加到你的 functions.php 文件这个函数

function custom_length_excerpt($word_count_limit) {
    $content = wp_strip_all_tags(get_the_content() , true );
    echo wp_trim_words($content, $word_count_limit);
}

然后在这样的模板中调用它

<p><?php custom_length_excerpt(50); ?>

wp_strip_all_tags 应该防止杂散 html 标签破坏页面。


功能文件

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。