WordPressの本文をプラグインを使用せずに置換するには

Last modified date

WordPressの本文をプラグインを使用せずにフィルタリングで置換する方法

WordPressを運営していると昔の記事の内容を一括で変更したくなることがあるであろう?

例えば「http」を「https」に変更したい場合や、記事内で使用している画像のURLをCDNのURLに変更する場合などだ。

今回はそういう時に使える置換テクニックを紹介していくぞ!

WordPressの記事内容をフィルタリングで置換する

今回の置換はfunction.phpにフィルタリング用のコードを追加していくのだ。

add_filter('post_link', 'words_change' );
add_filter('wp_nav_menu', 'words_change' );
add_filter('wp_get_custom_css', 'words_change' );
add_filter('widget_text_content', 'words_change' );
add_filter( 'widget_custom_html_content','words_change' );
add_filter( 'post_type_archive_link','words_change' );
add_filter( 'tag_link','words_change' );
add_filter( 'category_link','words_change' );
add_filter( 'the_content','words_change' );
add_filter('the_content_rss','words_change' );

function words_change($content ) {
    //置換する文言
	$replace_words= array('置換対象の文字'=>'置換後の文字');
	return strtr( $content, $replace_pairs );
}

strtr()を使用して置換する

今回使用したのはstrtr()という関数で、この関数を使用すると任意の文字列を置換することができる。

function words_change($content ) {
    //置換する文言
	$replace_words= array('置換対象の文字'=>'置換後の文字');
	return strtr( $content, $replace_pairs );
}

strtr()とは

strtrは文字の変換あるいは部分文字列の置換を行う関数である。
PHP公式マニュアルより

strtr()は、引数を3つ渡すか、2つ渡すかで挙動が異なるので注意するのだぞ。

引数を3つ渡す場合、シングルバイト文字だとバイト単位で置換するので、strtr()を使う場合は引数に連想配列を渡すほうが使いやすいかもしれぬな。

//使い方は2通りある
strtr ( string $string , string $from , string $to ) : string
//今回使用したのは引数に配列を使用する、こちらの使い方
strtr ( string $string , array $replace_pairs ) : string


//引数を3つ渡すパターンだと
echo strtr("baab", "ab", "01"); //結果は1001

//連想配列を渡す
$trans = array("ab" => "01");
echo strtr("baab", $trans);//結果はba01

strtr()の使い方

引数を2つで連想配列で渡す方法を使用する場合は、以下のような使い方になる。

複数の置換を同時に行うことも可能だ。その場合は連想配列を追加すればよい。

$word_array = array( "置換対象文字1" => "置換文字1");
//複数の場合は配列に追加すれば大丈夫だ
//$word_array = array( "置換対象文字1" => "置換文字1", "置換対象文字2" => "置換文字2");
echo strtr("置換コンテンツ",$word_array);

記事データをそのものを置換する方法との違い

WordPressで置換するしたい場合、以下の方法が考えられる。
(他にもあれば教えてくれ!)

・今回のように表示される前にフィルタリングを行う方法。
・データベース内の記事データを置換する方法。

記事データは更新しない

大きな違いは今回の置換方法の場合、記事データには一切触らないことであるな。

なのでコードを削除すれば置換部分がリセットされる。お手軽置換方法だ。

また、フィルタリング対象の文字を新規で追加した場合も、置換される。ここもデータベースから置換する方法との違いであるぞ。

記事データを置換する場合は、コードを書くのではなくデータベースで行うので、一度置換したら、もう一度置換するまではリセットされない。新規で追加した場合は置換されない。

プラグインを使用する場合は記事データをそのものを置換する手法になる

プラグインを使用して置換することも可能だ。

その場合はフィルタリングではなく、記事データをまとめて置換する方法になる。

置換で人気なプラグインはSearch Regexなんかがあるな。我も使ったことがあるが、直感的に使えていいぞ。

Search Regex

まとめ

WordPressの置換方法は2通りある。
・フィルタリングする方法
・記事データをデータベースから一括で書き換える方法

フィルタリングする場合は以下のコードで可能。複数の文言を行うことも可能だ。

記事データをデータベースから書き換える場合、データベースでクエリ文を書くか、プラグインを使うといい。

おすすめの置換プラグインはSearch Regex

add_filter('post_link', 'words_change' );
add_filter('wp_nav_menu', 'words_change' );
add_filter('wp_get_custom_css', 'words_change' );
add_filter('widget_text_content', 'words_change' );
add_filter( 'widget_custom_html_content','words_change' );
add_filter( 'post_type_archive_link','words_change' );
add_filter( 'tag_link','words_change' );
add_filter( 'category_link','words_change' );
add_filter( 'the_content','words_change' );
add_filter('the_content_rss','words_change' );

function words_change($content ) {
    //置換する文言
	$replace_words= array('置換対象の文字'=>'置換後の文字');
	return strtr( $content, $replace_pairs );
}

魔王様

コメントを残す

メールアドレスが公開されることはありません。

Post comment