问题描述
正如在标题中所说,我正在 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/
次佳解决方案
至于现在,你可以升级 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 »</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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。