the_contentの置換を動的に行う

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と併用すればいい。

一応これで目的は達せられたけど、もっとスマートなやり方がありそうだな・・・。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする