Как говорится в названии, я ищу несколько отрывков в 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') ?>
Cheers, Dave
Как насчет...
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); ?>
from: 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
Это самый простой способ добавления фильтров, которые могут быть вызваны из одной функции.
add_filter('excerpt_length', 'Excerpt::new_length', 999);
вместо этого (обратите внимание на последний параметр)
Я тоже искал эту функцию, и большинство функций здесь хорошие и гибкие. Для моего случая я искал решение, которое показывает другую длину фрагмента только на определенных страницах. Я использую это:
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);
В противном случае функция работает только с уже обрезанным фрагментом текста.
Вы можете добавить в свой файл 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.
Документация по функциям
Думаю, теперь мы можем использовать wp_trim_words
здесь.
Не уверен, какие дополнительные возможности для экранирования и дезинфекции необходимы для использования этой функции, но это выглядит интересно.
Здесь простой способ ограничить содержание или выдержку
$content = get_the_excerpt();
$content = strip_tags($content);
echo substr($content, 0, 255);
измените get_the_excerpt() на get_the_content(), если хотите содержимое.
Привет
Я бы сделал следующее:
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/ Надеюсь, это очень поможет вам.
Будьте осторожны, используя некоторые из этих методов. Не все из них вытесняют html-теги, то есть, если кто-то вставляет ссылку на видео (или url) в первое предложение своего сообщения, видео (или ссылка) будет отображаться в выдержке, возможно, раздувая вашу страницу.
Я знаю, что это действительно старый поток, но я просто боролся с этой проблемой, и ни одно из решений, которые я нашел в Интернете, не работало правильно для меня. Во-первых, мой собственный "excerpt_more" -фильтр всегда был отрезан.
То, как я решил, уродливо, но это единственное работающее решение, которое я мог найти. Уродство включает в себя модификацию 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
.
Теперь, если я хочу изменить длину по умолчанию, я делаю это в своем шаблоне:
<?php $excerpt_length = 10; the_excerpt() ?>
Изменение ядра - это ужасное решение, поэтому я хотел бы знать, если кто-то придумает что-то лучшее.
wp_trim_words()
) не работает для вас? Гораздо приятнее взлома ядра ...
the_content()
и get_the_content()
в моем опыте)
Я могу создать короткий код, я не пробовал, но написал для вас основную идею о его структуре
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"]
Используйте расширенный фрагмент
http://wordpress.org/extend/plugins/advanced-excerpt/
плагин. Я тоже нашел ответ с этой страницы.
Я нашел отличный плагин, который может это сделать - Content и Excerpt Word Limit