投稿本文を出力する方法の使い分けは結構難しい

2012-09-19

WordPressを利用する場合は、投稿本文にコンテンツを登録していくのが基本です。
しかし、この投稿本文。カスタマイズをしている場合には結構悩みどころです。

投稿本文出力における要件は、だいたい下記の組合せになってくると思います。

(1) 直感的に(Wordライクに)使用したい
(2) 改行は見たままに反映させたい
(3) HTMLタグを使用したい
(4) 投稿本文のデータを加工して出力したい
(5) ショートコードを使用したい
(6) JavaScriptも利用したい

普通のブログの場合には最低限(1)(2)が必要。
ブログの中でもHTMLタグも使う可能性がある場合には(1)(2)(3)が必要です。
でも(2)(3)だけで良い場合もあります。

ブログでは無い部分に投稿本文を使用する場合は、(1)(2)のケース、(3)のケース、(4)のケースなどがありますが、これは実際に更新する方の想定スキルに合わせないといけない部分でもあり、千差万別です。

これらの状況に加えて(5)(6)といったニーズが登場しますので、
どんな状況にも耐えうる方法というのは結構難しい課題です。


では下記に(1)~(6)の解決方法を記載しておきます。
(もちろんここに書いた方法以外にも解決手段はあります)

(1) 直感的に(Wordライクに)使用したい

これは投稿出力時に the_content 関数を利用していれば概ねOKです。
但し、WordPressの自動整形機能に従うという話ですので、色々制約もあります。
(整形されては困るものも整形されたりします)

(2) 改行は見たままに反映させたい

これは brBrbr というプラグインを利用し、the_content タグを使用すれば実現できます。

(3) HTMLタグを使用したい

the_content 関数を使用した状態でも可能ですが、自動整形機能によってうまく表示されないケースが出てきます。
その場合には $post->post_content 等によって取得したものを echo で出力すれば自動整形を免れます。

さて、ここからが問題。
$post->post_content を使用した瞬間に(1)や(2)が実現できなくなります。
(2)はPHPの nl2br 関数を利用すれば辛うじて実現できそうですが、普通HTMLタグは改行・インデントを入れて整形しますので、空行だらけの表示になってしまいます。でも改行しないと見辛くてメンテナンスできない、、、と。

(4) 投稿本文のデータを加工して出力したい

これも(3)と同様の方法でOKです。
$post->post_content で一旦変数に格納できますので、データ加工してから echo すれば良いです。

(5) ショートコードを使用したい

これは投稿出力時に the_content 関数を利用していれば概ねOKです。

(6) JavaScriptも利用したい

これも投稿出力時に the_content 関数を利用していれば概ねOKです。
これは(3)と同様の方法でOKです。$post->post_content で取得すれば自動整形されずにJavaScriptもそのまま表示できます。

但し、the_contentを使わないと困る。という場合もあります。
この場合、ショートコードやカスタムフィールドを利用するプラグインがありますので、これを利用しても良いです。
有名どころでは ContentEXHeadSpace などでしょうか。



さて、まとめに入ります。
投稿本文の記事出力には大きく the_content系と $post->post_content系がある、というのがわかります。
それぞれ「実現できること」が相反するので、サイトの構造や更新するユーザーに合わせて取捨選択する必要があります。
そうした上で「相反するけどどうしても必要な機能」をカスタマイズによって埋めていく。というのが現実的だと思います。

※文章書くだけで力尽きてしまい、画像無しの記事になってしまったので、後々追記致しますー
(追記前の記事を読んだ方。読みづらくて申し訳ないです!)