WordPressで記事内やタイトルからキーワードを自動置換や除去する方法
WordPressで記事のタイトルや文章に出てくる文字を別の文字に置き換える方法を紹介します。
サイトでページを表示する際に別の文字に置き換えます。あくまでも置き換えるだけであって、書き換える訳ではありません。一時的に変化させているだけです。
不要なキーワードを置き換えや削除したりと使い方によってはサイト制作の幅が広がるかもしれません。余り使う用途はないですが、アイデア次第です。
置換方法
文章内を置換
記事の文章内で特定のキーワードが出現したら置き換えたり、削除する方法です。
functions.phpに以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 |
function change_keyword($text){ $replace = array( //'変更前' => '変更後' 'book' => '本', 'pc' => '' ); $text = str_replace(array_keys($replace), $replace, $text); return $text; } add_filter('the_content', 'change_keyword'); |
上記のコードではbookの単語があれば本に置き換えます。pcの単語は除去されます。
pcの単語があれば、非表示にします。
PHPの「str_replace」という関数を使用して置換を実現しています。「str_replace」は指定した文字を別の文字に置き換えることができます。置き換える後の文字列を「”」(空)にすると非表示にできます。
タイトルを置換
タイトルに出てくるキーワードを置換したい場合は「the_content」を「the_title」にします。これでタイトル内の指定したキーワードが置換されます。
但し、HTMLソースコードの<title>~</title>内は置換されません。もう1つのadd_filterである「document_title_parts」を追加する必要があります。それではfunctions.php内に以下のコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 |
function change_keyword2($text){ $replace = array( //'変更前' => '変更後' 'book' => '本', 'pc' => '' ); $text = str_replace(array_keys($replace), $replace, $text); return $text; } add_filter('document_title_parts', 'change_keyword2'); add_filter('the_title', 'change_keyword2'); |
これでタイトル内で指定したキーワードが置換されます。
正規表現で置換
正規表現を使用すれば、複雑なキーワードの置換もできます。
正規表現を使う場合のPHP関数には「preg_replace」と「mb_ereg_replace」があります。今回は日本語に対応した「mb_ereg_replace」を使用します。
なお、注意点として正規表現を使わないのであれば、通常の「str_replace」を使用してください。「preg_replace」と「mb_ereg_replace」は正規表現が使える反面、処理スピードはかなり遅いためです。
文章内を正規表現で置換
文章内に出てくるキーワードを正規表現で置換します。functions.php内に以下のコードを記述します。
1 2 3 4 5 6 7 8 |
function change_any_texts3($text){ $patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/', '/^\s*{(\w+)}\s*=/'); $replace = array ('\3/\4/\1\2', '$\1 ='); $text = mb_ereg_replace($patterns, $replace,$text ); return $text; } add_filter('the_content', 'change_keyword'); |
上記のコードでは置換前のキーワードを「$patterns」内の「’/ここにキーワード/’」に記述します。複数ある場合は「,」で区切ります。
置換後のキーワードは「$replace」内に記述します。
タイトルを正規表現で置換
タイトルに出てくるキーワードを正規表現で置換します。functions.php内に以下のコードを記述します。
1 2 3 4 5 6 7 8 9 |
function change_any_texts4($text){ $patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/', '/^\s*{(\w+)}\s*=/'); $replace = array ('\3/\4/\1\2', '$\1 ='); $text = mb_ereg_replace($patterns, $replace,$text ); return $text; } add_filter('document_title_parts', 'change_any_texts4'); add_filter('the_title', 'change_any_texts4'); |
これでタイトル内のキーワードが正規表現で置き換わります。
注意点
注意点として色々なキーワードを置き換えていると意図せぬ置換が発生することもあります。
例えば、「abc」のキーワードが文章内にあれば、非表示にしたとします。
もしも、以下のような文章があれば、URLも崩れます。
<p><a href="https://abc.com">サイト</a></p>
↓
<p><a href="https://.com">サイト</a></p>
このような点にも注意して使用してください。
コメント内を置換
コメント内のキーワードを置換することもできます。
add_filterに使用していた「the_title」や「the_content」を変えるだけです。
1 2 3 4 5 6 7 8 9 |
function change_comment($comment) { $replace = array( 'tel' => '電話', 'phone' => '' ); $comment = str_replace(array_keys($replace), $replace, $comment); return $comment; } add_filter( 'get_comment_text', 'change_comment' ); |
上記のコードでは「get_comment_text」を使用しました。他にも「pre_comment_content」でも構いません。
プラグインで置換
今回はfunctions.phpにコードを記述して置換する方法をご紹介しましたが、WordPressには「Real-time Find and replace」という簡単にキーワードを置換できるプラグインがあります。
これはタイトルと文書内から指定したキーワードがあれば自動置換ができます。
なお、キーワードを置き換えるだけであり、書き換える訳ではありません。根本的にキーワードを書き換えるのであれば、「Search regex」のようなプラグインをお使いください。
それでは「Real-time Find and replace」を使用してみます。まずは、インストールをします。
WordPressの管理画面からプラグインを新規追加して、有効化してください。
使い方は簡単です。
「Find」に元のキーワードを入力します。「Replace」に置き換えるキーワードを入力します。なお、「Replace」を入力しない場合はキーワードは非表示になります。
正規表現を使用する場合は「RegEx?」にチェックを入れます。
「Add」ボタンをクリックすると新規枠を追加します。「Update Settings」で保存します。
これで、キーワードが置き換わるようになりました。
このプラグインを使用するかfunctions.phpにコードを記述する方法にするかはその人の好み次第です。
まとめ
タイトルや文章内のキーワードを置き換える方法は「掲示板」や「コミュニティーサイト」を運営する上で使う用途があるかなと思います。
例えば、暴言やアダルト用語が書かれたら、さりげなく別のキーワードに置き換えるのです。
自分で書く文章は置き換えずとも安心ですが、他社が書いた文章には意図せぬキーワードも含まれます。
この時に自動でキーワードを置き換えるのは便利なシステムです。
因みに検索エンジンは置き換え後の文書を検索登録します。例えば、「美味しいリンゴジュースの作り方」というタイトルの文書から「リンゴ」を置換削除したとします。Googleの検索エンジンは「美味しいジュースの作り方」と認識して検索登録してくれます。この置換システムは検索エンジンにも不用意な情報を与えることがないため安心です。
なお、似たような方法やコードを使って根本的にキーワードを書き換える方法も作れると思います。また、別の機会にご紹介します。
ありがとうございました。