// Generate custom excerpt length
function wpbx_excerpt_length($length) {
return 300;
}
add_filter('excerpt_length', 'wpbx_excerpt_length');
如何允许类似
<a> <b> <i> <br>
的html #1 楼
完整的摘录指南我最近回答了一些有关摘录的问题,因此,我将尽我所能给出详细的解释。
PREFACE
这个答案在代码应该去哪里方面似乎引起了两个问题,答案是,这实际上取决于您以及您认为如何。有两个选项可用于放置代码(如果未明确说明):
在主题的functions.php或用作函数文件的任何文件中。请记住,当您执行此操作时,如果主题不是您自己的,则升级主题时所有更改都将丢失。
更好的方法是在子主题中使用代码。如上,在functions.php或函数相关文件中,使用插件中的代码。这是首选方法,因为这使代码可在所有主题中使用。如果您切换主题,则不必担心重写相同的代码。
我希望这可以使事情变得简单:-)
HTML标记/格式
the_excerpt()
首先不接受任何参数,因此无法传递任何参数。实际上,the_excerpt()
会将内容修剪为55个单词,并且在返回文本之前将所有HTML标记剥离。 the_excerpt()
位于wp-includes / post-template.php中。要允许摘录中的某些或所有HTML标签,必须创建一个新摘录。首先,首先需要删除原始函数,然后将新函数挂接到其中
get_the_excerpt
。请注意,此新摘录在模板文件中仍可作为the_excerpt()
调用,无需更改。 get_the_excerpt()
位于wp-includes / post-template.php中。摘录使用
wp_trim_excerpt
返回修剪后的文本,因此我们需要首先从摘录过滤器中删除wp_trim_excerpt
。 wp_trim_excerpt()
位于wp-includes / formatting.php,第2355行。方法如下:remove_filter('get_the_excerpt', 'wp_trim_excerpt');
您现在可以将新的摘录添加到
get_the_excerpt
add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');
要允许html标签/格式,我们需要指定您需要允许的标签。您可以使用下面的
strip_tags
语句来实现该功能$wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags());
第二个参数
wpse_allowedtags()
是一个小的函数,用于添加the_excerpt()
允许的标签。有关有效的HTML 5标签的完整列表,请在此处进行检查。这是函数,在其中添加您需要允许/保留的所有html标签。function wpse_allowedtags() {
// Add custom tags to this string
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>';
}
如果需要允许所有HTML标签,即不剥离任何HTML标签标签,可以完全省略/删除
strips_tags()
功能。 但是要注意一点,当允许使用html标记时,这些标记将被视为单词,因此带有标记和不带有标记的摘录的单词计数将是不同的。若要更正此问题,您需要首先从实际的字数中删除这些标签,以便仅对字进行计数。
我写了一段摘录,该节将允许所有标签,仅将字计为单词,并且在设定的单词数之后完成一个句子(这样就不会在句子中途剪裁文本),并在最后一个单词后添加一个阅读更多的文本。
这是完整的代码
function wpse_allowedtags() {
// Add custom tags to this string
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>';
}
if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) :
function wpse_custom_wp_trim_excerpt($wpse_excerpt) {
$raw_excerpt = $wpse_excerpt;
if ( '' == $wpse_excerpt ) {
$wpse_excerpt = get_the_content('');
$wpse_excerpt = strip_shortcodes( $wpse_excerpt );
$wpse_excerpt = apply_filters('the_content', $wpse_excerpt);
$wpse_excerpt = str_replace(']]>', ']]>', $wpse_excerpt);
$wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags()); /*IF you need to allow just certain tags. Delete if all tags are allowed */
//Set the excerpt word count and only break after sentence is complete.
$excerpt_word_count = 75;
$excerpt_length = apply_filters('excerpt_length', $excerpt_word_count);
$tokens = array();
$excerptOutput = '';
$count = 0;
// Divide the string into tokens; HTML tags, or words, followed by any whitespace
preg_match_all('/(<[^>]+>|[^<>\s]+)\s*/u', $wpse_excerpt, $tokens);
foreach ($tokens[0] as $token) {
if ($count >= $excerpt_length && preg_match('/[\,\;\?\.\!]\s*$/uS', $token)) {
// Limit reached, continue until , ; ? . or ! occur at the end
$excerptOutput .= trim($token);
break;
}
// Add words to complete sentence
$count++;
// Append what's left of the token
$excerptOutput .= $token;
}
$wpse_excerpt = trim(force_balance_tags($excerptOutput));
$excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . ' » ' . sprintf(__( 'Read more about: %s »', 'wpse' ), get_the_title()) . '</a>';
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
//$pos = strrpos($wpse_excerpt, '</');
//if ($pos !== false)
// Inside last HTML tag
//$wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last word */
//else
// After the content
$wpse_excerpt .= $excerpt_more; /*Add read more in new paragraph */
return $wpse_excerpt;
}
return apply_filters('wpse_custom_wp_trim_excerpt', $wpse_excerpt, $raw_excerpt);
}
endif;
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');
您只需从需要的功能中删除'//'。
自定义执行长度
有时您需要显示不同长度的简单摘录,并且不可能为每个帖子/功能/页面写一个摘录。这是使用
wp_trim_words
的一个不错的小小的函数,它使用get_the_excerpt
并将其修整为用户设置的$limit
,并使用最后阅读更多链接。 您可以在模板中按以下方式调用此摘录
function wpse_custom_excerpts($limit) {
return wp_trim_words(get_the_excerpt(), $limit, '<a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Read more »', 'wpse' ) . '</a>');
}
其中
$limit
是您的字数,因此节选30个单词be echo wpse_custom_excerpts($limit);
这里只需要记住一件事,如果您将限制设置为超过55个单词,那么由于摘要的长度只有55个单词,因此只会返回55个单词。如果需要更长的摘录,请改用
get_the_content
。自定义摘录长度
如果只需要更改
the_excerpt()
的长度,则可以使用以下功能echo wpse_custom_excerpts(30);
请记住,您需要将优先级设置为大于10,以便自定义函数在默认值之后执行。
添加了更多的链接
摘录返回的所有文本的结尾都带有讨厌的
[...]
,该文本不可单击。要在竖线位置处添加更多的文字,请使用此功能function wpse_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'wpse_excerpt_length', 999 );
EDIT
摘录第一段
我想保持完整,所以下面是第一段后的摘录。
这是一个使HTML标签保持完整的函数,并在其中添加了“阅读更多”链接摘要的结尾,并在第一段后修剪摘要。
function wpse_excerpt_more( $more ) {
return ' <a class="read-more" href="'. get_permalink( get_the_ID() ) . '">' . __('Read More', 'your-text-domain') . '</a>';
}
add_filter( 'excerpt_more', 'wpse_excerpt_more' );
编辑29-10-2015
对于需要解决方法的任何人如果摘录短于所设置的字数,则在摘录后不显示更多链接,请参阅以下问答。
阅读更多标签显示在每个帖子上
评论
我到底在哪里放置此部分函数wpse_allowedtags(){//将自定义标签添加到此字符串中返回'