「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
strip_linefeedsモディファイアを使いつつ一部に改行を残す
MTQに、「strip_linefeedsモディファイアで改行を削除しつつも、適切な位置に改行を残したい」といった内容の質問がありました。
この質問に答えてみます。
改行を表す文字列をregex_replaceモディファイアで置換する
strip_linefeedsモディファイアを使うと、対象のテンプレートタグの出力に含まれる改行は、すべて削除されます。
一部の改行を残すような機能はありません。
ただ、strip_linefeedsモディファイアを適用した後で、regex_replaceモディファイアを使って、置換を行うことはできます。
この仕組みを利用して、以下のようにすることが考えられます。
- 1.改行を入れたい位置に、改行を表すような何らかの文字列を入れておきます。
- 2.strip_linefeedsモディファイアで、改行文字を削除します。
- 3.1.の改行を表す文字列を、regex_replaceモディファイアで改行文字に置換します。
事例
例えば、最近のブログ記事10件のタイトルと日付を、以下のようなフォーマットで出力したいとします。
<entry> <title>タイトル</title> <date>日付</date> </entry> ・ ・(同様のフォーマットで10件繰り返す) ・
改行したい位置に「[cr]」という文字列を入れるとします。
この場合、テンプレートを以下のように書きます。
<mt:Entries lastn="10" strip_linefeeds="1" regex_replace="/\[cr\]/g","\n"> <entry>[cr] <title><$mt:EntryTitle$></title>[cr] <date><$mt:EntryDate$></date>[cr] </entry>[cr] </mt:Entries>
「[」と「]」は正規表現で特別な意味を持つ文字なので、「\」(上のリストではバックスラッシュ)を付けています。
「/\[cr\]/g」の「g」は、見つかったものをすべて置換することを意味します。
また、置換先の「\n」が改行文字を意味します。