WordPressで毎回、必ずと言ってよいほど使う the_content(); のテンプレートタグですが、
今回はちょっとかゆいところに手が届くかもしれないカスタマイズを3つご紹介します。
HTMLタグ除去 + 先頭◯文字だけ出力(ループ内)
<?php
$content = $post->post_content;
$content = strip_tags($content); // タグ除去
$content = str_replace(array("\r\n","\r","\n"), ' ', $content); // 改行をスペースに
$mb_content = mb_strlen($content,"UTF-8"); // 文字量取得
if ($mb_content > 40) {
// 40文字より多い場合(「...」をつけて出力)
$content = mb_substr($content, 0, 40) . '…';
} else {
// 40文字以下の場合(そのまま出力)
$content = $content;
}
echo $content;
?>
index.php や archive.php などの一覧ページでよく使用しますが、
指定の文字数以下の場合は「…」を出力して表示させ、満たない場合は「…」をつけずにそのまま出力します。
中身の取得と出力変更(ループ内)
function content_change($the_content) {
$content = get_the_content();
if( strstr($content, 'mojimoji') ) {
// the_content(); に 'mojimoji' が入っている場合の処理
$content = 'mojimoji が入っている内容です。';
}
return $content;
}
add_filter('the_content','content_change');
投稿内容に特定の文字が含まれていた場合に、the_content(); で出力する内容を変えてしまいます。
画像のリンクにクラスを付与(functions.php)
function give_imagelink_class($content) {
$class_name = 'imagelink';
if ( preg_match('/<img/', $content) ) {
// aタグにクラス名がある場合の処理
$content = preg_replace('/(<a.*? class=".*?)(".*?><img)/', '$1 ' . $class_name . '$2', $content);
} else {
// aタグにクラス名がない場合の処理
$content = preg_replace('/(<a.*?)><img/', '$1 class="' . $class_name . '" ><img', $content);
}
return $content;
}
add_filter('the_content','give_imagelink_class');
こちらは、jQueryで画像をライトボックス風に表示させる際などに使用できるかと思います。
リンクの付いた画像には自動的に ‘imagelink’ というクラスが付与されます。
このような細かなカスタマイズを覚えておくと、作業も効率化でき、他のテンプレートタグの処理を変えたい時なども小回りが効くと思いますので、ぜひ試してみてください。