这是因为你没有正确使用过滤器。这个the_title
筛选器将要筛选的标题传递为$title
参数,但您正在使用以下代码覆盖它:
global $post;
$id = ($post->ID);
$title = get_post( $id )->post_title;
该代码完全没有必要,因为标题已在函数中可用:
function max_title_length( $title ) {
因此,只需删除这些行即可过滤正确的标题:
function max_title_length( $title ) {
$max = 20;
if ( strlen( $title ) > $max ) {
return substr( $title, 0, $max ) . \' …\';
} else {
return $title;
}
}
add_filter( \'the_title\', \'max_title_length\' );
请注意—正如您所经历的那样—这个
the_title
过滤器适用于所有标题,包括帖子、页面和菜单项。因此,如果您只想将代码应用于循环中输出的标题,可以使用
in_the_loop()
功能:
function max_title_length( $title ) {
$max = 20;
if ( in_the_loop() && strlen( $title ) > $max ) {
return substr( $title, 0, $max ) . \' …\';
} else {
return $title;
}
}
add_filter( \'the_title\', \'max_title_length\' );