Как говорится в названии, я ищу несколько отрывков в 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(']]>', ']]>', $content); return $content; }
то в свой код шаблона вы просто используете ..
<?php echo excerpt(25); ?>
от: http://bavotasan.com/tutorials/limiting-the-number-of-words-in-your-excerpt-or-content-in-wordpress/
На данный момент вы можете обновить ответ Марти:
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 »</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);
В противном случае функция работает только с уже обрезанным фрагментом текста.
Я думаю, что теперь мы можем использовать wp_trim_words
здесь . Не уверен, какие дополнительные возможности для экранирования и дезинфекции необходимы для использования этой функции, но это выглядит интересно.
Вы можете добавить в свой файл 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
должен препятствовать wp_strip_all_tags
тегов html.
Документация по функциям
Здесь простой способ ограничить содержание или выдержку
$content = get_the_excerpt(); $content = strip_tags($content); echo substr($content, 0, 255);
измените get_the_excerpt () на get_the_content (), если хотите содержимое.
С уважением
Я нашел отличный плагин, который может это сделать – Content и Excerpt Word Limit
Использовать расширенную выдержку
http://wordpress.org/extend/plugins/advanced-excerpt/ плагин. Я тоже нашел ответ с этой страницы.
Я могу создать короткий код, я не пробовал, но написал для вас основную идею о его структуре
function twentyten_excerpt_length($atts,$length=null){ shortcode_atts(array('exlength'=>'short'),$atts); if(!isset($atts['exlength']) || $atts['exlength'] == 'short') { return 15; }elseif( $atts['exlength'] == 'medium' ){ return 30; // or any value you like }elseif( $atts['exlength'] == 'long' ){ return 45; // or any value you like }else{ // return nothing } } add_shortcode('the_excerpt_sc','twentyten_excerpt_length');
так что вы можете использовать его так
[the_excerpt_sc exlength="medium"]
Я знаю, что это действительно старая нить, но я просто боролся с этой проблемой, и ни одно из решений, которые я нашел в Интернете, не работало правильно для меня. С одной стороны, мой собственный «отрывок» больше всего был отсечен.
То, как я это решал, уродливо, но это единственное рабочее решение, которое я мог найти. Уродство включает в себя модификацию 4 строк ядра WP (!!) + использование еще одной глобальной переменной (хотя WP уже делает это так, что я не чувствую себя слишком плохо).
Я изменил wp_trim_excerpt
в wp-includes / formatting.php на следующее:
<?php function wp_trim_excerpt($text = '') { global $excerpt_length; $len = $excerpt_length > 0 ? $excerpt_length : 55; $raw_excerpt = $text; if ( '' == $text ) { $text = get_the_content(''); $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $excerpt_length = apply_filters('excerpt_length', $len); $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]'); $text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); } $excerpt_length = null; return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); }
Единственный новый материал – $excerpt_length
и $len
bits.
Теперь, если я хочу изменить длину по умолчанию, я делаю это в своем шаблоне:
<?php $excerpt_length = 10; the_excerpt() ?>
Изменение ядра – это ужасное решение, поэтому я хотел бы знать, если кто-то придумает что-то лучшее.
Будьте осторожны, используя некоторые из этих методов. Не все из них вытесняют html-теги, то есть, если кто-то вставляет ссылку на видео (или url) в первое предложение своего сообщения, видео (или ссылка) будет отображаться в выдержке, возможно, раздувая вашу страницу.
Я бы сделал так:
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
Вот статья об использовании пользовательской длины выдержки в WordPres. Существует ряд способов ограничения и контроля длины выписки.
http://smallenvelop.com/limit-post-excerpt-length-in-wordpress/ Надеюсь, это поможет вам.