Несколько длин выдержки в WordPress - PullRequest
63 голосов
/ 03 ноября 2010

Как говорится в заголовке, я ищу несколько длин выдержек в 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') ?>

Ура, Дейв

Ответы [ 15 ]

94 голосов
/ 03 ноября 2010

Как насчет ...

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/

69 голосов
/ 19 июня 2013

На данный момент вы можете обновить ответ Марти:

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

Вы также можете определить пользовательскую ссылку «читать дальше» следующим образом:

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());
}
26 голосов
/ 03 ноября 2010

Это то, что я придумал.

Добавьте это к вашему 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

Это самый простой из известных мне способов добавления фильтров, которые можно вызывать из одной функции.

10 голосов
/ 30 августа 2013

Я также искал эту функцию, и большинство функций здесь хорошие и гибкие.Для моего собственного случая я искал решение, которое показывало бы различную длину выдержки только на определенных страницах.Я использую это:

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

Вставьте этот код в файл functions.php тем.

5 голосов
/ 26 апреля 2014

Вы можете добавить в свой файл 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-тегах.


Документация по функциям

5 голосов
/ 24 декабря 2011

Возвращаясь к ответу Марти:

Я знаю, что прошло уже больше года с тех пор, как этот ответ был опубликован, но лучше поздно, чем никогда. Чтобы это работало с лимитами, превышающими WordPress по умолчанию 55, вам необходимо заменить эту строку:

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

с этой строкой:

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

В противном случае функция работает только с уже урезанным фрагментом текста.

4 голосов
/ 07 августа 2012

Я думаю, что теперь мы можем использовать wp_trim_words см. Здесь .Не уверен, какие дополнительные экранирование данных и очистка необходимы для использования этой функции, но это выглядит интересно.

3 голосов
/ 11 марта 2015

Здесь простой способ ограничить содержимое или выдержку

$content = get_the_excerpt();
$content = strip_tags($content);    
echo substr($content, 0, 255);

изменить get_the_excerpt () на get_the_content (), если вы хотите содержимое.

С уважением

1 голос
/ 15 октября 2013

Будьте осторожны, используя некоторые из этих методов. Не все из них убирают html-теги. Это означает, что если кто-то вставит ссылку на видео (или URL) в первом предложении своего поста, видео (или ссылка) появится в отрывке, возможно, взорвав вашу страницу.

0 голосов
/ 30 мая 2017

Я бы сделал так:

function _get_excerpt($limit = 100) {
    return has_excerpt() ? get_the_excerpt() : wp_trim_words(strip_shortcodes(get_the_content()),$limit);
}

Использование:

echo _get_excerpt(30); // Inside the loop / query

Почему?

  • Если has_excerpt должен вернуть данный отрывок
  • Это не так, поэтому обрезать слова / полосы коротких кодов с the_content
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...