記事の内容にPHPで処理を加えて表示したい
自分で立ち上げたサービスをWordPressで紹介しまくっていて、サービス名を後から変更しちゃったので、過去の記事に記載してあるサービス名を一括で変更したい
なんてことありませんでしょうか。
サービス名に限らず、名称を誤って紹介し続けてたり、ドメイン名変更やリンクURLの変更などなど、困った方も多いのではないでしょうか。
変更したい文字列が同じであれば、一括して置換することが出来るので、その方法を紹介したいと思います。
変更方法
単純に、記事の内容を変更するだけであれば以下の方法があります。
- 変更したい記事すべてを手動で修正する
- データベースをダンプして、変更したい文字列をテキストエディタなどで一括変換し、データをインポートする
- index.php、single.phpといったテンプレートファイルに、特定文字列を置換するプログラムを作って入れる
1番目は、対象の投稿記事が少なければ選択できますが、多い場合は時間もかかる上に対応漏れなど発生する恐れがあるので、避けたいところであります。
2番目は、少々SQLの知識が必要になり、また誤った操作をして、記事に意図しない変更が加わったりすると、サイトが表示されなくなる恐れがあります。
というわけで、3番目の方法 を深堀していきます。
テンプレートファイルにプログラムを入れる方法
ループ処理の中で、記事情報を取得し、PHPで処理を追加して表示させるだけです。
例として、記事にある「mislead」という文字列を「misdirection」に変換してみたいと思います。
<?PHP if (have_posts()) : while (have_posts()) : the_post(); // ①コンテンツ内容を取得 $content = get_the_content(); // ②コンテンツ($content)に処理を加える //例であげた通り、「mislead」という文字列を「misdirection」に変換する $content = preg_replace(“/mislead/” , ”misdirection” , $content); // ③コンテンツ($content)を成形し、表示する $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); echo $content; endwhile; endif; ?>
①コンテンツ内容を取得
get_the_content() を使って、本文を$contentに格納しています。
the_content()を使うと、書き出し処理まで走ってしまうので、必ずget_the_content()を使ってください。
②コンテンツ($content)に処理を加える
例であげた通り、「mislead」という文字列を「misdirection」に変換しています。
ここは好きな処理に変更してください。
なお、ここで加えた処理は、元の記事に影響はありません。
なので、「やっぱり戻したい」と思ったらこの記述を削除すれば戻せます。
③コンテンツ($content)を成形し、表示する。
get_the_content()を利用すると、the_content()で使用しいているフィルターフックが実行されないので、ここで実行させてやります。
「echo $content;」だけでも表示されますが、セキュリティ的にフックをかますことをおすすめします。
フィルターフックって何?という方はこちらをどうぞ。
最後に
2つの方法を紹介しましたが、ケースバイケースかと思います。
「サーバ移転でドメイン名も変更したい」、みたいな場合はdumpデータを弄るだろし、「元記事を触りたくないなー」って時はプログラムを入れて対応すると思います。
ただし、プログラムを入れまくると、当然処理が重たくなるので、十分注意が必要です。
コメント一覧
コメントはありません