記事の抜粋やタイトルを一覧に表示するとき、長い文章をそのまま出すとレイアウトが崩れてしまいます。そんなときに役立つのが WordPress の wp_trim_words() 関数です。指定した単語数(日本語では文字数)で文章を切り詰め、末尾に「…」などを付けて短く整えてくれます。この記事では、wp_trim_words() の基本的な使い方から、引数の役割、日本語での挙動、HTML タグが除去される点、そして投稿一覧やカスタムフィールドでの実践的な使い方まで、コーディング初心者〜中級者の方に向けて公式仕様に沿って解説します。
目次
wp_trim_words とは何をする関数か
wp_trim_words() は、渡したテキストを指定した単語数で切り詰めるための WordPress の関数です。文章が指定した長さを超えていれば余分な部分を取り除き、末尾に省略を示す記号(既定では「…」)を付けて返します。逆に、もともと指定した長さに満たないテキストなら、何も付け足さずにそのまま返します。
投稿一覧やトップページで本文の冒頭だけを見せたい、長いタイトルを決まった長さで切りそろえたい、といった場面でよく使われます。自分で文字列を切る処理を書く必要がなく、HTML タグの除去まで内部でやってくれるため、安全かつ手軽に「文章を短く表示する」目的を達成できます。
基本の使い方
関数のシグネチャは次のとおりです。第1引数に対象のテキスト、第2引数に残す単語数、第3引数に切り詰めたときに末尾へ付ける文字列を渡します。第2引数と第3引数は省略可能で、省略すると単語数は 55、末尾の記号は「…」になります。
// シグネチャ
// wp_trim_words( string $text, int $num_words = 55, string $more = null ): string
$text = '春はあけぼの。やうやう白くなりゆく山ぎは、すこしあかりて、紫だちたる雲のほそくたなびきたる。';
// 10 文字(日本語の場合)で切り詰める
$short = wp_trim_words( $text, 10 );
echo $short;
// 出力例: 春はあけぼの。やうや…
このように、第2引数で指定した長さを超えた分が取り除かれ、末尾に「…」が付きます。第2引数を省略すれば、既定値の 55 が使われます。戻り値は切り詰め後の文字列なので、そのまま echo したり変数に入れて使えます。
3つの引数の役割
引数は3つあり、それぞれの役割を押さえておくと使い分けがしやすくなります。とくに第3引数の $more は、末尾に付ける記号を自由に変えられる便利なオプションです。各引数の意味を整理すると次のとおりです。
| 引数 | 役割 |
|---|---|
$text | 切り詰めの対象となるテキスト。HTML タグは内部で除去される。必須の引数 |
$num_words | 残す単語数。日本語などでは文字数として扱われる。省略時は 55 |
$more | 切り詰めが発生したときに末尾へ付ける文字列。省略時(null)は「…」になる |
第3引数の $more を指定すると、末尾の記号を好きな文字列に変えられます。たとえば「…続きを読む」のような表現にしたい場合は、次のように書きます。
$text = '春はあけぼの。やうやう白くなりゆく山ぎは、すこしあかりて、紫だちたる雲のほそくたなびきたる。';
// 末尾を「… 続きを読む」に変える
$short = wp_trim_words( $text, 10, '… 続きを読む' );
echo $short;
// 出力例: 春はあけぼの。やうや… 続きを読む
なお $more はあくまで「切り詰めが起きたとき」だけ末尾に付きます。テキストが指定した長さに収まっていて切り詰めが発生しない場合は、$more の文字列は付与されません。
日本語では文字数で数えられる
関数名に「words(単語)」とあるとおり、wp_trim_words() は本来「単語数」で文章を切り詰めます。英語のように単語と単語の間がスペースで区切られている言語では、第2引数がそのまま単語の数を表します。たとえば英文に対して wp_trim_words( $text, 10 ) とすれば、先頭から10単語が残ります。
一方、日本語のように単語をスペースで区切らない言語では、単語の境界を機械的に判定できません。そのため WordPress は、こうした言語に対しては「1文字ずつ」を数える方式に切り替えます。具体的には、ロケールに応じて文字単位でカウントするモードになり、$num_words は単語数ではなく文字数として適用されます。日本語環境(マルチバイト・UTF-8)では、内部でマルチバイトを正しく考慮して1文字ずつ数えるため、文字化けせずに切り詰められます。
つまり、日本語の記事で wp_trim_words( $text, 40 ) と書いた場合は「先頭40文字」が残る、と考えればおおむね正しい挙動になります。英語と日本語で第2引数の意味(単語数か文字数か)が変わる点を覚えておくと、表示される長さの感覚をつかみやすくなります。
HTML タグは取り除かれる
wp_trim_words() は、切り詰めの前に対象テキストから HTML タグをすべて除去します。内部で wp_strip_all_tags() が呼ばれ、<p> や <a> はもちろん、<script> や <style> といったタグとその中身も取り除かれます。残るのはプレーンなテキストだけです。
$html = '<p>これは<strong>重要な</strong>お知らせです。<a href="#">詳しくはこちら</a></p>';
// タグは除去され、テキストだけが切り詰められる
echo wp_trim_words( $html, 8 );
// 出力例: これは重要なお知らせ…
この性質のおかげで、本文に含まれるリンクや装飾タグを気にせず、一覧表示用の短いテキストを安全に作れます。逆に言えば、切り詰めた結果に HTML を残したい場合には向きません。wp_trim_words() はあくまで「タグを除いたテキストを短くする」関数だと理解しておきましょう。
投稿一覧やカスタムフィールドで短く表示する
本文から抜粋を作って表示する
もっとも多いのが、投稿の本文を短くして一覧に表示するケースです。get_the_content() で本文を取得し、wp_trim_words() に渡せば、決まった長さの抜粋を簡単に作れます。テーマの archive.php やループの中で、次のように使えます。
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<article>
<h2><?php the_title(); ?></h2>
<?php
// 本文を 40 文字(日本語)で切り詰めて表示する
$excerpt = wp_trim_words( get_the_content(), 40, '…' );
?>
<p><?php echo esc_html( $excerpt ); ?></p>
</article>
<?php endwhile; endif; ?>
戻り値はタグが除去されたプレーンテキストですが、出力時には念のため esc_html() でエスケープしておくと安全です。なお、抜粋(the_excerpt())にも内部的に wp_trim_words() が使われています。抜粋の文字数だけを変えたい場合は excerpt_length フィルターを使う方法もありますが、テンプレートで直接長さを指定したいときは wp_trim_words() を呼ぶほうが分かりやすいでしょう。
タイトルやカスタムフィールドを切りそろえる
本文だけでなく、長くなりがちなタイトルやカスタムフィールドの値を一覧で切りそろえるのにも使えます。get_the_title() や get_post_meta() で取得した文字列をそのまま渡すだけです。カードレイアウトのように高さをそろえたい場面で重宝します。
// 長いタイトルを 20 文字で切りそろえる
$title = wp_trim_words( get_the_title(), 20, '…' );
echo esc_html( $title );
// カスタムフィールド(例: サブ説明文)を短く表示する
$description = get_post_meta( get_the_ID(), 'sub_description', true );
echo esc_html( wp_trim_words( $description, 30, '…' ) );
このように、表示したい長さを引数で指定するだけで、さまざまな文字列を統一した長さに整えられます。本文・タイトル・カスタムフィールドのいずれも同じ書き方で扱えるのが wp_trim_words() の便利なところです。
切り詰めの結果を調整したいとき
wp_trim_words() は、切り詰めた後のテキストに対して wp_trim_words という名前のフィルターを適用します。このフィルターには、切り詰め後のテキスト・指定した単語数・末尾に付ける文字列・元のテキストの4つが渡されます。サイト全体で切り詰め結果を一律に加工したい場合は、このフィルターをフックして調整できます。
// 切り詰め後のテキストを加工するフィルター
function my_trim_words( $text, $num_words, $more, $original_text ) {
// 例: 末尾の句読点を取り除くなどの調整ができる
return $text;
}
add_filter( 'wp_trim_words', 'my_trim_words', 10, 4 );
多くの場合はフィルターを使わず、第2引数と第3引数の指定だけで十分です。表示する長さや末尾の記号を変えたいだけなら、まずは引数で調整し、サイト全体で共通の加工を入れたくなったときにフィルターを検討する、という順序で考えるとよいでしょう。
まとめ
wp_trim_words() は、テキストを指定した長さで切り詰め、末尾に「…」などを付けて短く整える WordPress の関数です。シグネチャは wp_trim_words( $text, $num_words = 55, $more = null ) で、第2引数で残す長さ、第3引数で末尾の記号を指定します。英語では単語数として数えられますが、日本語などでは1文字ずつ数えられるため、第2引数はおおむね文字数として働きます。HTML タグは内部の wp_strip_all_tags() で除去されるので、プレーンなテキストが安全に得られます。投稿一覧の抜粋、長いタイトルやカスタムフィールドの切りそろえなど、文章を短く見せたい場面で活躍する関数です。