WordPress中用钩子设置get_the_excerpt摘要长度无效,求正确钩子
解决
excerpt_length钩子不生效的问题 嘿,我来帮你搞定这个问题~你写的代码逻辑本身没问题,但excerpt_length钩子不生效通常有几个常见原因,我给你拆解一下,再提供对应的解决办法:
常见失效原因&对应方案
文章手动填写了自定义摘要
如果在文章编辑页面的「摘要」字段里手动输入了内容,WordPress会直接使用这段内容,不会触发
excerpt_length的截断逻辑。
解决办法:要么清空手动填写的摘要,让系统自动生成;如果想保留手动摘要但调整长度,可以自己处理:// 获取手动摘要后截断到10个单词 $manual_excerpt = get_post_field('post_excerpt', get_the_ID()); $trimmed_excerpt = wp_trim_words($manual_excerpt, 10, '...'); echo $trimmed_excerpt;主题/插件覆盖了你的钩子优先级
你的代码优先级是10,很多主题或插件会用更高的优先级(比如20、999)来设置摘要长度,导致你的回调被覆盖。
解决办法:把你的钩子优先级调高,比如改成999:function custom_excerpt_length( $length ) { return 10; } add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );主题自定义了摘要生成逻辑
有些主题会自己写摘要函数,没有用WordPress默认的wp_trim_excerpt,这时候excerpt_length钩子就没用了。
解决办法:直接过滤get_the_excerpt的结果,强制截断:function custom_filter_excerpt( $excerpt ) { // 移除默认的[...]后缀,再截断到10个单词 $excerpt = preg_replace('/\[…\]/', '', $excerpt); $excerpt = wp_trim_words( $excerpt, 10, '...' ); return $excerpt; } add_filter( 'get_the_excerpt', 'custom_filter_excerpt', 999 );
额外提示
get_the_excerpt()和the_excerpt()默认都会调用wp_trim_excerpt函数,这个函数才是触发excerpt_length钩子的核心。如果以上方案都不行,你可以检查主题的functions.php,看看有没有重写wp_trim_excerpt或者自定义摘要的代码。
内容的提问来源于stack exchange,提问作者user10201522
相关产品推荐
相关产品推荐

