COMPLETE GUIDE TO EXCERPTS
我最近回答了一些关于摘录的问题,所以我将尽可能详细地解释。
PREFACE
这个答案似乎提出了几个关于代码应该放在哪里的问题,答案是,这真的取决于您以及您认为合适的方式。有几个选项可以放置代码(如果没有明确说明):
主题的功能。php或任何用作函数文件的文件。请记住,当您这样做时,如果主题不是您自己的,那么在升级主题时,所有更改都将丢失
更好的方法是在子主题中使用代码。如上所述,在函数中。php或函数相关文件
使用插件中的代码。这是首选的方式,因为这使得代码可以跨所有主题使用。如果切换主题,就不必担心重写相同的代码。
我希望这能把事情弄清楚一点:-)
HTML TAGS/FORMATTING
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标记的完整列表,请访问并查看
here. 这里是函数,向其中添加您需要允许/保留的任何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标记,即不剥离任何标记
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\');
只需从需要额外的函数中删除“//”。
CUSTOM EXCERPT LENGTHS
有时,您需要显示不同长度的简单摘录,并且不可能为每个帖子/功能/页面都编写摘录。下面是一个很好的小函数
wp_trim_words
function wpse_custom_excerpts($limit) {
return wp_trim_words(get_the_excerpt(), $limit, \'<a href="\'. esc_url( get_permalink() ) . \'">\' . \' …\' . __( \'Read more »\', \'wpse\' ) . \'</a>\');
}
这个小函数的作用是
get_the_excerpt
, 将其修剪为
$limit
由用户设置,并返回文本,最后带有“阅读更多”链接。
您可以在模板中调用此摘录,如下所示
echo wpse_custom_excerpts($limit);
在哪里
$limit
将是你的字数,因此30个单词的摘录将
echo wpse_custom_excerpts(30);
这里只需要记住一件事,如果您将限制设置为超过55个单词,那么只会返回55个单词,因为摘录的长度只有55个单词。如果需要更长的摘录,请使用
get_the_content
相反
CUSTOM EXCERPT LENGTH
如果您只需要更改
the_excerpt()
, 您可以使用以下功能
function wpse_excerpt_length( $length ) {
return 20;
}
add_filter( \'excerpt_length\', \'wpse_excerpt_length\', 999 );
请记住,您需要设置大于10的优先级,以便自定义函数在默认值之后执行。
ADD READ MORE LINK
摘录返回的所有文本都具有
[...]
最后是不可点击的。要在hellips位置添加阅读更多文本,请使用此函数
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\' );
EDIT
Excerpt first paragraph
我想保持完整,所以这里是第一段之后的摘录。
这里有一个函数,它可以保持HTML标记的灵活性,在摘录的末尾添加一个“阅读更多”链接,并在第一段后修剪摘录。
if ( ! function_exists( \'wpse0001_custom_wp_trim_excerpt\' ) ) :
function wpse0001_custom_wp_trim_excerpt($wpse0001_excerpt) {
global $post;
$raw_excerpt = $wpse0001_excerpt;
if ( \'\' == $wpse0001_excerpt ) {
$wpse0001_excerpt = get_the_content(\'\');
$wpse0001_excerpt = strip_shortcodes( $wpse0001_excerpt );
$wpse0001_excerpt = apply_filters(\'the_content\', $wpse0001_excerpt);
$wpse0001_excerpt = substr( $wpse0001_excerpt, 0, strpos( $wpse0001_excerpt, \'</p>\' ) + 4 );
$wpse0001_excerpt = str_replace(\']]>\', \']]>\', $wpse0001_excerpt);
$excerpt_end = \' <a href="\'. esc_url( get_permalink() ) . \'">\' . \' » \' . sprintf(__( \'Read more about: %s »\', \'pietergoosen\' ), get_the_title()) . \'</a>\';
$excerpt_more = apply_filters(\'excerpt_more\', \' \' . $excerpt_end);
//$pos = strrpos($wpse0001_excerpt, \'</\');
//if ($pos !== false)
// Inside last HTML tag
//$wpse0001_excerpt = substr_replace($wpse0001_excerpt, $excerpt_end, $pos, 0);
//else
// After the content
$wpse0001_excerpt .= $excerpt_more;
return $wpse0001_excerpt;
}
return apply_filters(\'wpse0001_custom_wp_trim_excerpt\', $wpse0001_excerpt, $raw_excerpt);
}
endif;
remove_filter(\'get_the_excerpt\', \'wp_trim_excerpt\');
add_filter(\'get_the_excerpt\', \'wpse0001_custom_wp_trim_excerpt\');
编辑2015年10月29日
如果任何人需要一种解决方法,以便在摘录后不显示“阅读更多”链接,当摘录短于所设置的字数时,请参阅以下问题和答案