我尝试将span标签添加到标题中的每个字母,空格,字符。当我使用str_split
时,特殊字符将转换为另一种格式。
if ( !function_exists( 'my_title' ) ):
function my_title( $str = '' ) {
$output = '';
$str = empty( $str ) ? wp_strip_all_tags( get_the_title() ) : $str;
if ( empty( $str ) ) {
return $output;
}
$i = 1;
foreach( str_split ( $str ) as $letter ) if ( $i++ <= 12 ) {
if ( !empty( $letter ) ) {
$output .= '<span>' . $letter . '</span>';
}
};
return wp_kses_post( $output );
}
endif;
echo my_title('Page title - with dash');
答案 0 :(得分:1)
问题很可能是由于wptexturize()
函数应用于帖子标题,其中某些字符(例如-
(破折号)会自动转换为HTML实体例如–
代表“漂亮”破折号。
所以尝试一下,这对我有用:
if ( !function_exists( 'my_title' ) ):
function my_title( $str = '', $max_chars = 12 ) {
$output = '';
remove_filter( 'the_title', 'wptexturize' );
$str = empty( $str ) ? wp_strip_all_tags( get_the_title() ) : $str;
add_filter( 'the_title', 'wptexturize' );
if ( empty( $str ) ) {
return $output;
}
$str = html_entity_decode( $str, ENT_NOQUOTES, 'UTF-8' );
for ( $i = 0; $i < min( mb_strlen( $str ), $max_chars ); $i++ ) {
if ( $letter = mb_substr( $str, $i, 1 ) ) {
$output .= '<span>' . $letter . '</span>';
}
}
return wp_kses_post( $output );
}
endif;
对不起,@ michael,我应该提到我还修改了my_title()
函数以使用html_entity_decode()
,mb_strlen()
和mb_substr()
函数,以便HTML实体妥善处理。 (str_split()
无法正确处理多字节编码的字符串,例如–
之类的HTML实体)
因此,即使将wptexturize()
函数应用于帖子标题,修改后的my_title()
函数也应该不会遇到处理–
等问题HTML实体(或类似的特殊字符)。因此,您可以根据需要对此进行更改:
remove_filter( 'the_title', 'wptexturize' );
$str = empty( $str ) ? wp_strip_all_tags( get_the_title() ) : $str;
add_filter( 'the_title', 'wptexturize' );
对此:
$str = empty( $str ) ? wp_strip_all_tags( get_the_title() ) : $str;
即不必删除wptexturize
钩子。万一您想保留由wptexturize()
函数转换的“漂亮”破折号和其他特殊字符,以防万一。 =)