palfanさん、こんにちは。
最初に、コムズカシイ話をしておくと、閲覧環境によって改行される文字数は異なってしまいます。
WindowsとMacは搭載されているフォントが異なりますから、当然文字間隔も異なります。また、ブラウザの文字サイズ設定によって文字の大きさ自体が変えられている可能性もあります。
つまりは、改行されないように調整するよりも、改行されても破綻しないデザインにしておく方が、ユーザーにとっての利便性は向上することになります。
それを踏まえた上で、今回のご質問ですが、プラグインで行おうとすると、記事のタイトルだけでなく、ページリストやリンクのtitle属性その他、タイトルが表示される部分の多くに適用されてしまうため問題があります。
なので、ユーザー関数での実装としてみました。
my-hacks.phpでもテーマのfunctions.phpでも良いですが、下記の関数を追加してください。
function trim_str_by_chars( $str, $len, $echo = true, $suffix = '...', $encoding = 'UTF-8' ) {
if ( ! function_exists( 'mb_substr' ) || ! function_exists( 'mb_strlen' ) ) {
return $str;
}
$len = (int)$len;
if ( mb_strlen( $str = wp_specialchars_decode( strip_tags( $str ), ENT_QUOTES, $encoding ), $encoding ) > $len ) {
$str = wp_specialchars( mb_substr( $str, 0, $len, $encoding ) . $suffix );
}
if ( $echo ) {
echo $str;
} else {
return $str;
}
}
あとは、テンプレートのタイトルを出力している箇所(大抵は<?php the_title() ?>)を
<?php trim_str_by_chars( get_the_title(), 10 ); ?>
といった感じに記述していただければ、指定された文字数(上記例は10文字)になります。
出力例
新しい記事新しい記事...
文字が切りつめられた場合に付加される文字列のデフォルトは、…としていますが、変更したい場合は、第4引数で指定することで変更できます。
その他、タイトルだけでなく本文の一部のみ表示させるような場合にも使える関数にしています。(タグの途中で切られないよう、タグは取り去ってしまいますが。)
jim912さま
ありがとうございます 無事 希望通りの結果になりました