the_contentの内容を一部置換する方法は検索するとすぐ見つかるのだけど、今回は置換する文字列を動的にする必要があった。
固定ページなどの任意の場所に、動的に更新される文字列を入れたい。
単に置換を行うなら、function.php内に以下のコードを追加すればいい。
function the_content_replace($text){ $replace = array( // '元の文字列' => '置換する文字列' 'IOS5' => '<a href="#">IOS5</a>', 'Android 4.0' => '<a href="#">Android 4.0</a>' ); $text = str_replace(array_keys($replace), $replace, $text); return $text; } add_filter('the_content', 'the_content_replace');
これを元にして書いてみる。
まず、記事の入力欄に、他には使わないような、任意の文字列を書いておく。
[“korewokaeruyo1”]
[“korewokaeruyo2”]
次に、上記の置換処理のコードを元に、以下のよう書いてみた。
$replace = …
の前に、必要な処理を書いてあげればいい。
function the_content_replace($text){ $str1 = 動的に変更をくわえたいことなどなど; $str2 = 動的に変更をくわえたいことなどなど; $replace = array( // '元の文字列' => '置換する文字列' '["korewokaeruyo1"]' => $str1 , '["korewokaeruyo2"]' => $str2 ); $text = str_replace(array_keys($replace), $replace, $text); return $text; }
さらに、フィルタを毎度呼び出すのではなく、置換したい時のみ呼び出すように変えてみる。
function.php内に、以下を追加。
function doReplace(){ add_filter('the_content', 'the_content_replace'); }
このdoReplaceを呼んだときのみフィルタがかかるようにした。
今回は固定ページなので、page.php内で。
大分カスタマイズしちゃったので、元がどんな内容か覚えてないけど、
<?php the_content(); ?>
の前に、
<?php doReplace(); ?>
を追加する。
doReplace()を特定の条件で呼びたければifと併用すればいい。
一応これで目的は達せられたけど、もっとスマートなやり方がありそうだな・・・。